Python 将字典行插入数据库
Python 将字典行插入数据库,python,Python,示例_表具有id(int)自动递增,json_col(text) 这是我想插入字典行的example\u表中的示例记录 +----+----------------------------------------------+ | id | json_col | +----+----------------------------------------------+ | 1 | {"NO":"
示例_表
具有id(int)自动递增,json_col(text)
这是我想插入字典行的example\u表中的示例记录
+----+----------------------------------------------+
| id | json_col |
+----+----------------------------------------------+
| 1 | {"NO":"1","NIM":"4313010001","NAME":"BENJI"} |
| 2 | {"NO":"2","NIM":"4313010002","NAME":"KENJI"} |
| 3 | {"NO":"3","NIM":"4313010003","NAME":"RYUJI"} |
+----+----------------------------------------------+
这是python脚本中的字典数组
dict_result =
[{'NIM': '4313010013','NAME': 'YUKA','STATUS': 'PASSED'},
{'NIM': '4313010008','NAME': 'YUKO','STATUS': 'PASSED'},
{'NIM': '4313010017','NAME': 'YUKI','STATUS': 'PASSED'}]
我正试图像上面的示例记录一样,将它们分别插入到example\u表中。我就是这么做的,我试着把它转换成一个字符串,也许它可以传递行,就像上面的示例记录一样,但它引发了一个错误,说ProgrammingError:(1064,“您的SQL语法有错误;请检查与您的MariaDB服务器版本相对应的手册,以了解在第1行的“NIM”:“4313010013”,“NAME”:“YUKA”,“STATUS”:“PASSED”})”附近使用的正确语法”)
我读过其他问题,但在其他情况下,它会将字典变成列,在我的情况下,我想插入它,因为它就像一个json。我应该怎么做
已解决
在Danya02的评论和添加信息的帮助下,这一行解决了问题
for i in dict_hasil:
x = str(i)
cursor.execute("""INSERT INTO example_table (json_col) values ("{x}")""".format(x=x))
conn.commit()
发生这种情况是因为您试图将数据放入SQL命令中,但周围没有引号。直接的问题可以通过编写“{x}”
而不是{x}
来解决
但是,这样做是一个糟糕的想法,因为这是一个等待发生的过程。要解决这个问题,您不需要将要插入数据库的数据直接放在查询字符串中,而是使用查询参数:
cursor.execute(“插入mydata(fieldA,fieldB)值(?,)”,(“邪恶”,“数据”))
你是正确的,为了将字典放入数据库行,你需要使用JSON或类似的东西对它进行编码。你可以查看其他答案,看看如何执行或,但一旦得到,你就会得到一个字符串,你可以将其插入数据库,如上图所示。发生这种情况是因为你试图将数据放入SQ不带引号的L命令。直接的问题可以通过编写“{x}”
而不是{x}
来解决
但是,这样做是一个糟糕的想法,因为这是一个等待发生的过程。要解决这个问题,您不需要将要插入数据库的数据直接放在查询字符串中,而是使用查询参数:
cursor.execute(“插入mydata(fieldA,fieldB)值(?,)”,(“邪恶”,“数据”))
正确的做法是,为了将字典放入数据库行中,需要使用JSON或类似的方法对其进行编码。您可以查看其他答案以了解如何执行或,但一旦获得该答案,您将得到一个字符串,您可以将其插入数据库中,如上图所示。表的架构是什么?示例_表具有id(int)自动递增,json_col(text)尝试在{x}
之间添加双引号?这可能只是添加了双引号,不是100%确定。它不起作用的原因是您需要在值周围加引号。您好,在{x}中写入“{x}”而不是“{x}”导致语法错误:无效“
。别担心,我犯了一个错误,它还应该使用“”“
或sql语句。但是这些行没有进入数据库tho..请记住,这里没有使用JSON。您使用的是dict
的字符串表示形式,这不一定是不使用eval
或类似方法就可以解析回Python对象的东西。如果您使用json.dumps
和json.loads
,您将在读取放回数据库的数据时避免许多问题。您的表的架构是什么?示例\u表的id(int)自动递增,json\u col(text)尝试在{x}
之间添加双引号?这可能只是把它加进去,不是100%确定。它不起作用的原因是因为您需要在值周围引用。您好,将{x}改为{x}导致语法错误:在中{x}的语法无效。别担心,我犯了一个错误,它还应该使用“”“
或sql语句。但是这些行没有进入数据库tho..请记住,这里没有使用JSON。您使用的是dict
的字符串表示形式,这不一定是不使用eval
或类似方法就可以解析回Python对象的东西。如果您使用json.dumps
和json.loads
,您将在读取放回数据库的数据时避免许多问题。您好,在中写入“{x}”而不是“{x}”导致语法错误:无效语法中的“{x}”
。不过,我犯了一个错误,它还应该使用“”“
或sql语句。但是行没有进入数据库tho..那是因为sql行本身被括在“双引号”中无论如何,你甚至不应该试图让它这样运作,因为这是一个痛苦和不安全的世界。至少,如果您决定使用JSON,它也会使用双引号,因此它会导致与您现在看到的相同的错误,除了在SQL代码中。哦,我明白了,但是写“{x}”而不是“{x}导致的语法错误:{x}中的语法无效。我之所以选择json,是因为列总是在变化,通过json,我不需要创建不断变化的列,这是我学校的最后一个项目,我真的不需要让它安全,你可能会感兴趣。它是一个将数据存储为JSON文档的数据库,因此您可以在其中包含许多不同字段的不同对象,因此您不必事先决定模式。我已经解决了这个问题,我刚刚发现我需要调用提交函数。另外,对sql语句使用“
加上“{x}”是正确的。嗨,写“{x}”而不是“{x}”引起的语法错误:在“{x}”中无效语法。不过,我犯了一个错误,它也应该使用”
或sql语句。但是争吵并没有引起注意
for i in dict_hasil:
x = str(i)
cursor.execute("""INSERT INTO example_table (json_col) values ("{x}")""".format(x=x))
conn.commit()