更新:Ivan Mainettiの提案に基づいてgithubに問題をオープンしました。あなたがそこに体重を入れたいのであれば、それはです:https://github.com/orientechnologies/orientdb/issues/6757一般Python Unicode/ASCIIキャスティングの問題Pyorientで問題が発生する
私はOrienDBをベースにしたデータベースとそのためのpythonインターフェイスを使っています。私はそれにかなり幸運を覚えましたが、私は特定のユニコード文字を扱うときにドライバー(象徴的な)のような問題に遭遇しました。
私はデータベースにアップロードしていたデータ構造は次のようになります。
new_Node = {'@Nodes':
{
"Abs_Address":Ono.absolute_address,
'Content':Ono.content,
'Heading':Ono.heading,
'Type':Ono.type,
'Value':Ono.value
}
}
私はOrientDB/pyorientに完璧レコードの文字通り何百を作成しました。しかし、特定のレコードで失敗する理由は、Ono.absolute_address要素にpyorientが何らかの形で窒息しているユニコード文字があるためです。
私が作成したいレコードが/ U/C/2/A1-2のAbs_addressを持っていますが、私は上記の私のデータ構造体に値を渡すときに私が取得するノードがこれです:
{'@Nodes': {'Content': '', 'Abs_Address': u'/u/c/2/a1\u20132', 'Type': 'section', 'Heading': ' Transferred', 'Value': u'1\u20132'}}
私は何とか私の問題は、PythonがユニコードとASCII文字列/文字を混在させていると思いますか?私はPythonに少し新しくタイプを宣言していないので、new_Nodeオブジェクトが適切にフォーマットされた文字列を出力しないとすれば、これはpyorient perseの問題ではないと思っていますか?それとも、これはユニコードを好きではない象徴的な例ですか?私はこの髪を裂いている。どんな助けもありがとうございます。
エラーがpyorientから来ていて、何らかのテキストエンコーディングではない場合は、ここでpyorient関連の情報があります。私はこのコード使用してレコードを作成しています:
rec_position = self.pyo_client.record_create(14, new_Node)
をそして、これは私が取得していますエラーです:
com.orientechnologies.orient.core.storage.ORecordDuplicatedException - Cannot index record Nodes{Content:,Abs_Address:null,Type:section,Heading: Transferred,Value:null}: found duplicated key 'null' in index 'Nodes.Abs_Address' previously assigned to the record #14:558
それはバックエンドのデータベースがためにnullオブジェクトを取得していることを示唆しているようなエラーが奇数であります住所・アドレス。明らかに、この "アドレス"のエントリを作成しましたが、それは私がしたいものではありません。なぜユニコードのアドレス文字列がデータベース内でヌルになっているのかわかりません...私はnew_Nodeデータ構造体に入力した文字列を使ってorientDBスタジオから作成できますが、私はpythonを使用することはできません同じこと。
誰かが助けますか?
EDIT:ローランへ
おかげで、私はUnicodeオブジェクトおよびpyorientとは何かに問題を絞り込むました。渡している変数がUnicode型である場合、Pyorientアダプタは、OrientDBデータベースにnull値を送ります。私は、問題を引き起こしていることがndashのシンボルの値を決定し、そしてローランは私がこのコード
.replace(u"\u2013",u"-")
を使用してマイナス記号に置き換える助けた私は、しかし、pyorientは、それがその後、として渡しUnicodeオブジェクトを取得することを行うとnull値...これは良くありません。 str(...)を使用して文字列を再作成することでこの短期的な問題を解決できます。これは私の直面する問題を解決するように見えます:
str(Ono.absolute_address.replace(u"\u2013",u"-"))
問題は、DBデータにシンボルやその他の異常な文字が含まれることがわかっています。私はデータベースをUnicode文字列をサポートしているので、手動で追加したり、SQL構文を使ってpyorientやpythonで行えないことを行うことができます。これはどこかで問題があると思われていますが、 。これはこの問題と非常によく似ているようです:http://stackoverflow.duapp.com/questions/34757352/how-do-i-create-a-linked-record-in-orientdb-using-pyorient-library
そこの人は誰ですか? Pythonの神ですか?ラッキーなs0bs? =)
データベーススキーマ(存在する場合)を教えてください。 'Nodes.Abs_Address'インデックスはどのように宣言されていますか? –
もちろん、OrientDBスタジオGUIを使用して作成しました。これはString型です。より具体的なものを探しているなら、DBから取得する方法を教えてください。私はあなたのためにそれをつかむことができます。私はOrientDBが初めてです。ありがとう! – user2938099
String型/エンコーディングについても同様の質問があります。http://stackoverflow.com/questions/7381718 –