【问题标题】:How do I insert data from a Python dictionary to MySQL?如何将 Python 字典中的数据插入 MySQL?
【发布时间】:2011-02-07 01:57:20
【问题描述】:

我从 MySQL 处理了一些数据,结果字典“数据”(打印数据)显示如下:

{'1': ['1', 'K', abc, 'xyz', None, None, None, datetime.date(2009, 6, 18)],
 '2': ['2', 'K', efg, 'xyz', None, None, None, None],
 '3': ['3', 'K', ijk, 'xyz', None, None, None, datetime.date(2010, 2, 5, 16, 31, 2)]}

如何创建表并将这些值插入 MySQL 表中?换句话说,我如何将它们转储到 MySQL 或 CSV?不确定如何处理 datetime.date 和 None 值。任何帮助表示赞赏。

【问题讨论】:

  • 您是否缺少None? (使用类...)
  • 是的,更新了!谢谢。这只是样本数据。谢谢肯。

标签: python mysql dictionary


【解决方案1】:

这里是一些创建 MySQL 数据库并插入一些数据的基本代码。

import MySQLdb
import datetime

THEHOST="localhost"
THEUSER="user"
THEPASSWD="passwd"
THEDB="database"

connection=MySQLdb.connect(
    host=THEHOST,user=THEUSER,passwd=THEPASSWD,db=THEDB)
cursor=connection.cursor()

abc,efg,ijk=1,2,3

data={'1': ['1', 'K', abc, 'xyz', None, None, None, datetime.date(2009, 6, 18)],
      '2': ['2', 'K', efg, 'xyz', None, None, None, None],
      '3': ['3', 'K', ijk, 'xyz', None, None, None,
            datetime.datetime(2010, 2, 5, 16, 31, 2)]}

sql='''\
CREATE TABLE IF NOT EXISTS temp (id int auto_increment primary key,
    field1 varchar(8),
    field2 int,
    field3 varchar(8),
    field4 bool,
    field5 varchar(8),
    field6 varchar(8),
    field7 datetime )'''

cursor.execute(sql)

sql='''\
INSERT INTO temp (id, field1, field2, field3, field4, field5, field6, field7)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
'''
cursor.executemany(sql, data.values())

【讨论】:

  • 感谢您的解决方案 :) 我不断收到此错误:TypeError: 并非所有参数都在字符串格式化期间转换。我用这个: sql='''\ INSERT INTO delUseThisTable (key, primary) VALUES (%s, %s) ''' cursor.executemany(sql, data.values()) 我有 78 列这张桌子。我尝试使用 2 列开始,但失败了。想法?谢谢你!
  • @NJTechie:也许可以试试print data.values()。它应该是一个 2 元素列表的列表,例如 [[1,'K'],[2,'L']]。内部列表必须恰好有 2 个元素。否则,您可能会收到错误TypeError: not all arguments converted...
  • 天啊,先生,你真是个天才 :) 我不知道我们必须一次插入所有这些,而不仅仅是 2 列!绝对学到一两件事!非常感谢!
【解决方案2】:

大多数与 MySQL 兼容的 dbapi 连接器会自动将 Python 的 None 转换为 SQL 的 NULL 并将 Python 的 datetime 对象转换为 SQL TIMESTAMPs。

真的,您只需要打开一个到数据库的连接,获取一个游标,然后遍历字典进行插入。但是,如果不知道您的架构,就不可能给您示例代码。

【讨论】:

    【解决方案3】:

    datetime.date 匹配 DATE 字段,None 变为 NULL。将.executemany()dict.values() 结合使用以执行INSERT。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-17
      • 2021-10-08
      • 2016-01-25
      • 2020-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多