Ich möchte die Objektdatenbank verwenden, um einige in IronPython erstellte Klassen beizubehalten. Die Datenbank ist db4o für .NET 2.0 (heute heruntergeladen). Der Code sieht wie folgt aus:Wie Objekte, die in IronPython erstellt wurden, in Objektdatenbanken gespeichert werden
import clr
clr.AddReferenceToFileAndPath(r"C:\dev\Db4objects\db4o-7.12-net20\bin\net-2.0\Db4objects.Db4o.dll")
from Db4objects.Db4o import *
db = Db4oFactory.OpenFile(r'G:\IronPython\test\db4o\database.db')
class Person(object):
def __init__(self, name, age):
self.Name = name
self.Age = age
def __str__(self):
return 'Person: ' + self.Name + ' ' + str(self.Age)
p1 = Person('testp', 34)
db.Store(p1)
I Ausnahme bei db.Store(p1)
Unexpected char '$'
ThrowUncheckedException at offset 4 in file:line:column <filename unknown>:0:0
FatalShutdown at offset 136 in file:line:column <filename unknown>:0:0
AsTopLevelCall at offset 112 in file:line:column <filename unknown>:0:0
AsTopLevelStore at offset 34 in file:line:column <filename unknown>:0:0
StoreInternal at offset 69 in file:line:column <filename unknown>:0:0
Store at offset 66 in file:line:column <filename unknown>:0:0
Store at offset 12 in file:line:column <filename unknown>:0:0
Store at offset 15 in file:line:column <filename unknown>:0:0
v Microsoft.Scripting.Actions.Calls.MethodCandidate.Caller.CallWithInstance(Object[] args, Boolean& shouldOptimize)
v IronPython.Runtime.Types.BuiltinFunction.BuiltinMethodCaller`2.Call1(CallSite site, CodeContext context, TFuncType
func, T0 arg0)
v System.Dynamic.UpdateDelegates.UpdateAndExecute3[T0,T1,T2,TRet](CallSite site, T0 arg0, T1 arg1, T2 arg2)
v Microsoft.Scripting.Interpreter.DynamicInstruction`4.Run(InterpretedFrame frame)
v Microsoft.Scripting.Interpreter.Interpreter.Run(InterpretedFrame frame)
v Microsoft.Scripting.Interpreter.LightLambda.Run2[T0,T1,TRet](T0 arg0, T1 arg1)
v IronPython.Compiler.PythonScriptCode.RunWorker(CodeContext ctx)
v IronPython.Compiler.PythonScriptCode.Run(Scope scope)
v IronPython.Hosting.PythonCommandLine.<>c__DisplayClass1.<RunOneInteraction>b__0()
Exception: Unexpected char '$'
CLR Exception:
Exception
:
Unexpected char '$'
Ich vermute bekommen, dass das Problem mit Ironpython und seiner Art System ist, weil die Klasse Person
nicht Standard .NET-Klasse ist. Ich habe versucht, System.IO.FileInfo
persistieren und es hat gut funktioniert. Wie kann ich ein Objekt speichern, das eine Instanz einer Klasse in IronPython ist?
Können Sie dieses Problem mit nur Python replizieren, ein nicht Eisen Python. –
Ich weiß nicht, wie man .NET-Assemblies nach Python importiert (ich dachte, das ist nicht möglich). Also kann ich das mit meinem derzeitigen Wissen nicht replizieren. – stej
Wahrscheinlich nicht, was Sie hören möchten, aber Sie könnten Ihre Modelle in C# definieren und sie in Ihre IronPython-Umgebung importieren. Ich werde gerne wissen, wie Sie das Problem lösen, wenn überhaupt. – tarn