保管方法で作成したオブジェクトにIronPythonオブジェクトのデータベース
-
23-09-2019 - |
質問
利用したいオブジェクトのデータベースが続く一部のクラスで作成されたIronPython.データベースをdb4oます。純2.0(ダウンロード。次のようなコードになります:
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)
かの例外を 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 '$'
疑いる問題はIronPythonとその型システムのクラス Person
います。純クラスです。また持続 System.IO.FileInfo
やたところ、うまくいったのです。たいのですが店舗であるオブジェクトのクラスのインスタンスにIronPython?
解決
Db4oのCLR-反射機構を取得するメタ情報オブジェクトのためにダウンロードしましょう。この動作のためのスレッドセーフで、C#、VB.NET など。言語などのIronPythonとIronRuby用の追加の層の上にCLRするすべての素晴らしい力が特徴です。
時db4oのCLR-反射光を見、追加のものであるを実装するために使われているのが特徴です。この店のこれらの情報は失敗します。あな簡単なるエレガントな解決方法はどのように利用=(
- 前述したように、コメント定義ができるデータ-オブジェクトにC#アプリケーションVB.NETようにな平野古CLRオブジェクト。こういうのが最も早い解決すべきます。
- することができるんでdb4oのオブジェクト-モデルのpythonにより書面までは払える気があります。 リフレクタ.それは確かに容易ではない。
- Db4oてSelfReflector'の対象となる環境にな反射を生み出します。が基本的に手動で追加のメタ情報オブジェクトです。しかし見当たらないので文書化します。
もうひとつの可能性が使用ODBMSるためにPythonのように、 ZODB の代わりにdb4o.なくなった場合ZOBR上IronPython.
他のヒント
あなたはインスタンスを永続化するためにピクルスを使用することができます:
輸入はcPickle db.Store(cPickle.dumps(P1))
と、オブジェクトのバックを持参するcPickle.loadsを(...)を使用します。
所属していません StackOverflow