所以我在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)")
我将我的列表列表称为 upstream_data 和downstream_data 并执行以下操作:
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 单元中?
在这里输出