gpt4 book ai didi

python - 将 Python 列表(JSON 或其他)插入 MySQL 数据库

转载 作者:可可西里 更新时间:2023-11-01 07:49:03 24 4
gpt4 key购买 nike

所以我在 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 单元中?

输出 here

最佳答案

你需要让MySQL库为你做参数处理;这具有让 MySQL 准备您的语句的额外好处,也使重复插入更快:

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', ?, ?, ?, ?, ?, 0, P, 0"
cur.execute(sql_input, (export_date, export_time, export_numtests, export_upstream, export_downstream))

参见 Python DB API 2.0 spec有关参数化 SQL 的(一些)更多详细信息。每个数据库适配器都记录了确切支持的参数格式,因此也请检查。例如,MySQLdb 模块模仿 python 字符串格式化语法,并使用 %s 作为占位符:

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"

其他可能的参数选项是数字(:1, :2 等),名称(:foo, :bar)或其他形式的 python 字符串格式, 命名格式说明符: (%(foo)s, %(bar)s).

关于python - 将 Python 列表(JSON 或其他)插入 MySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12305356/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com