将Python字典快速导入MySQL表的最佳方法是什么?

7 投票
3 回答
13956 浏览
提问于 2025-04-15 21:26

我有一个字典对象。我用这个方法把数据导出了:

for alldata in data: # print all data to screen
    print data[alldata]

每个字段都有方括号 [],并且用 'None' 来表示空值,日期值则是用 date.datetime 来表示。

我该怎么把这个字典的数据放到 MySQL 表里呢?谢谢!

打印出来的数据看起来像这样:

{'1': ['1', 'K', abc, 'xyz', None, None, None], '2': ['2', 'K', efg, 'xyz', None, None, None], '3': ['3', 'K', ijk, 'xyz', None, None, None]}

我该如何把这些数据插入到 MySQL 中呢?

3 个回答

0

这可能是之前某个问题的重复,或者可以通过这个帖子来回答:使用Python字典进行SQL插入语句

不过,为了回答你的问题,我在另一个问题上发过这个,现在也在这里重发一遍:

def ins_query_maker(tablename, rowdict):
keys = tuple(rowdict)
dictsize = len(rowdict)
sql = ''
for i in range(dictsize) :
    if(type(rowdict[keys[i]]).__name__ == 'str'):
        sql += '\'' + str(rowdict[keys[i]]) + '\''
    else:
        sql += str(rowdict[keys[i]])
    if(i< dictsize-1):
        sql += ', '
query = "insert into " + str(tablename) + " " + str(keys) + " values (" + sql + ")"
print(query) # for demo purposes we do this
return(query) #in real code we do this

对于一个字典

tab = {'idnumber': 1, 'fname': 'some', 'lname': 'dude', 'dob': '15/08/1947', 'mobile': 5550000914, 'age' : 70.4}

我们得到的输出如下面的截图所示。请注意,这只是一个简单的例子,需要进行一些合理性检查,并且可以修改以支持批量更新(使用字典的字典)等。

上面提到的代码的输出

4

这个例子非常好,而且兼容性也很强。你可以在这里查看:http://code.activestate.com/recipes/457661-generate-sql-for-insertation-into-table-from-dicti/

13

假设你已经安装了 MySQLdb(mysql-python):

sql = "INSERT INTO mytable (a,b,c) VALUES (%(qwe)s, %(asd)s, %(zxc)s);"
data = {'qwe':1, 'asd':2, 'zxc':None}

conn = MySQLdb.connect(**params)

cursor = conn.cursor()
cursor.execute(sql, data)
cursor.close()

conn.close()

撰写回答