だから私はPythonでたくさんの配列データを持っています。むしろ、リストのリストがあります。この配列を MySQL データベースの単一のセルに格納しようとしています。JSON を使用してデータをシリアル化しようとしましたが、おそらく JSON の仕組みがわかりません。
したがって、データベースに接続した後:(アップストリームとダウンストリームの LONGTEXT および LONGBLOB データ型を試しました
cur = con.cursor()
cur.execute("CREATE TABLE IF NOT EXISTS 963168MBV17A(Id INT AUTO_INCREMENT PRIMARY KEY, Rev INT, Part VARCHAR(15), SN INT(7), Date DATE, Time TIME, Iterations INT(3), Upstream LONGBLOB, Downstream LONGBLOB, ResultList LONGTEXT, Result CHAR(1), Report LONGBLOB)")
アップストリーム データとダウンストリーム データというリストのリストを取得して、次のようにします。
export_upstream = json.dumps(upstream_data)
export_downstream = json.dumps(downstream_data)
次に、SQL コマンドを実行します。
cur = con.cursor()
sql_input = "INSERT INTO 963168MBV17A(Rev, Part, SN, Iterations, Date, Time, Upstream, Downstream, ResultList, Result, Report) VALUES('503', '100-120970-0031', '1594539', '%s', '%s', '%s', '%s', '%s', 0, P, 0" %(export_date, export_time, export_numtests, export_upstream, export_downstream)
cur.execute(sql_input)
Mordi (http://stackoverflow.com/questions/4251124/inserting-json-into-mysql-using-python) による回答を参照して、私も試しました:
export_upstream = json.dumps(json.dumps(upstream_data))
export_downstream = json.dumps(json.dumps(downstream_data))
しかし、関係なく、エラーが発生します:
Traceback (most recent call last):
File "P:\Projects\testing database\scrap\test.py", line 83, in <module>
cur.execute(sql_input)
File "C:\Python27\lib\site-packages\MySQLdb\cursors.py", line 174, in execute
self.errorhandler(self, exc, value)
File "C:\Python27\lib\site-packages\MySQLdb\connections.py", line 36, in defaulterrorhandler
raise errorclass, errorvalue
ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1")
さらに、私がするとき
print "about to execute(%s)" % sql_input
JSON オブジェクトが、あちこちにたくさんの一重引用符が付いた長い文字列として表示されていることがわかります (リストの場合と、文字列を表すために外側にある場合)。json.dumps(json.dumps(upstream_data)) を実行すると、内側の引用符が二重引用符 "" になり、前に \ 文字が付きます。それでも、同じエラーが発生します。
何か案は?そうでない場合、Python 配列/リスト データを単一の MySQL セルに保存するより良い方法はありますか?
ここに出力