繁体   English   中英

将 Python 字典写入 MySQL,每个键有多个值

[英]Writing Python Dictionary to MySQL with multiple values per key

我正在尝试将 python 字典写入 MySQL ,每个键有多个值,尝试使用类似于此的内容:

placeholders = ', '.join(['%s'] * len(myDict))
columns = ', '.join(myDict.keys())
sql = "INSERT INTO %s ( %s ) VALUES ( %s )" % (table, columns, placeholders)
# valid in Python 2
cursor.execute(sql, myDict.values())
# valid in Python 3
cursor.execute(sql, list(myDict.values()))

我收到以下错误:

Traceback (most recent call last):
  File "./grabber.py", line 86, in <module>
    cursor.execute(sql, list(relay_stats.values()))
  File "/usr/lib64/python2.7/site-packages/MySQLdb/cursors.py", line 205, in execute
    self.errorhandler(self, exc, value)
  File "/usr/lib64/python2.7/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
    raise errorclass, errorvalue
_mysql_exceptions.OperationalError: (1241, 'Operand should contain 1 column(s)')

字典看起来像这样:

server01 (0.0, 0.0, '2020-07-07 15:01:54')
server02 (0.0, 0.0, '2020-07-07 15:01:54')
server03 (0.0, 0.0, '2020-07-07 15:01:54')
server04 (0.0, 0.0, '2020-07-07 15:01:54')

MySQL 表:

+-------------+----------+------+-----+---------+----------------+
| Field       | Type     | Null | Key | Default | Extra          |
+-------------+----------+------+-----+---------+----------------+
| ID          | int(11)  | NO   | PRI | NULL    | auto_increment |
| server_name | char(1)  | YES  |     | NULL    |                |
| file_count  | float    | YES  |     | NULL    |                |
| file_size   | float    | YES  |     | NULL    |                |
| curtime     | datetime | YES  |     | NULL    |                |
+-------------+----------+------+-----+---------+----------------+

我怎样才能插入这个,所以每个值都是数据库中的一列,同时将 0.0 值保持为整数?

与其创建另一个字典,不如创建一个包含值的元组列表:

values = []
for key, value in sorted(servers.items()):
    values.append((key, fc_grab(value), fs_grab(value), curtime))

现在您可以创建您的 SQL

placeholders = ', '.join(['%s'] * len(values[0]))
columns = ', '.join(['server_name', 'file_count', 'file_size', 'curtime'])
sql = "INSERT INTO %s ( %s ) VALUES ( %s )" % (table, columns, placeholders)
cursor.executemany(sql, values)

cursor.executemany在单个 python 方法调用中插入所有行,而不是在循环中执行cursor.execute

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM