插入多个字典对象到MySQL数据库使用Python和MySQLdb的(Inserting multi

2019-08-16 19:12发布

我一直在努力与这几个小时,我觉得现在哭泣我无法捉摸发生了什么事。

这是我的数据的简化版本:

mydata = [ { 'id': 123, 'thing': 'ghi', 'value': 1 }, { 'id': 456, 'thing': 'xyz', 'value': 0 } ]

这是我的代码:

import MySQLdb as mdb

con = None
con = mdb.connect('localhost', 'testing', 'anothervalue', 'andanother');
cur = con.cursor()

sql = "INSERT INTO `tablename` ( `id`, `thing`, `value` ) VALUES ( %(id)s, %(thing)s, %(value)s )"
cur.executemany( sql, ( mine for mine in mydata ) )
con.close()

我希望发生的是,两行会被插入到表名 。 而实际上,该脚本执行没有任何错误,且行插入。

我究竟做错了什么? 如果我用手工做一个INSERT其插入到表正确,所以我想知道它不与MySQL数据库的问题,而是如何我传递变量到数据库中。

另外一个问题,我是如何我插入作为浮动? 目前,我在表中TINYTEXT NOT NULL价值定义,我想这是FLOAT NOT NULL,但我不知道如何处理上述substition。

Answer 1:

有没有必要在使用发电机循环mydata 。 只是通过在mydata直接:

cur.executemany(sql, mydata)

数据库适配器将遍历mydata为你和发电机表达只插入一个不必要的额外的循环。

如果你没有得到任何错误消息,但没有任何变化,检查以下内容:

  • 请确保您提交事务; 运行con.commit().executemany()调用。

  • TRIPPLE-检查 mydata不是空的。

数据库适配器将正确处理您的浮点值; 如果列被标记为FLOAT NOT NULL ,你在一个Python浮点值,通过该列,事情就工作。 这就是SQL参数是,正确处理不同的引用数据类型。



Answer 2:

默认情况下,MySQL是启用自动提交。 要检查您的设置当前配置,请连接到您的MySQL实例并执行以下操作。

mysql> select @@autocommit;    
+--------------+    
| @@autocommit |    
+--------------+    
|            1 |    
+--------------+
1 row in set (0.00 sec)

如果该值为1,则启用它......否则不....

说实话,你原来的代码段工作正常,我。 因此,这可能主要是自动提交的问题。

尝试添加以下行之前con.close()在你的原代码。

con.commit()

你仍然可以给我的片段一试贴,如果自动提交启用下面...你能够在MYDATA列表成员从字典改变元组类型? 如果是的话,请看看下面的代码片段可以帮助你。

import MySQLdb as mdb

mydata = [ { 'id': 123, 'thing': 'ghi', 'value': 1 }, { 'id': 456, 'thing': 'xyz', 'value': 0 } ]
mydata_modified=[ (123, 'ghi', 1 ), ( 456, 'xyz', 0 ) ]

con = None
con = mdb.connect('localhost', 'testing', 'anothervalue', 'andanother');
cur = con.cursor()

cur.executemany( """INSERT INTO tablename ( id, thing, value ) VALUES ( %s, %s, %s )""", mydata_modified )
con.commit()
con.close()


Answer 3:

只是一个供参考,以扩大Guddu,您可以将您的字典元组类型做一样的东西:

mydata_modified = []
for x in mydata:
   mydata_modified.append(tuple(x.values()))


文章来源: Inserting multiple dictionary objects into a MySQL database using python and MySQLdb