gpt4 book ai didi

python - 从 Python 字典中插入值,包括 MySQL 的键

转载 作者:行者123 更新时间:2023-11-29 12:23:32 24 4
gpt4 key购买 nike

我有以下字典:

   {    '': ['0', '9'], 
'3904': ['playback_error', '87'],
'3808': ['playback_error', '24'],
'3902': ['qp_library_failed_to_start', '1'],
'3903': ['playback_error', '464'],
'3805': ['playback_error', '141'],
'3807': ['playback_error', '29'],
'3806': ['playback_error', '1'],
'1309': ['playback_error', '2'],
'3803': ['playback_error', '28'],
'BL-1008': ['parental_controls_error', '5'],
'errorCode': ['eventKey', '2'],
'404': ['tbr_error', '68'],
'3308': ['playback_error', '10']}

我想将这些值插入到 mysql 数据库中,例如:

   ERRORCODE, EVENTKEY, COUNT

3904, playback_error, 87

3808,playback_error, 24

3902,qp_library_failed_to_start,1

3903,playback_error

我创建了一个 python 代码来执行此操作,但它不会将值插入数据库 我收到错误:mysql_exceptions.OperationalError:(1136,“列计数与第 1 行的值计数不匹配”)这是我的 python 代码:

data=mydict
print data
#print data.values()

# Open database connection
db = MySQLdb.connect(host,user,passwd,db)

cursor = db.cursor()

# Prepare SQL query to INSERT a record into the database.
sql = '''INSERT INTO errorscode (id,date,errorcode,eventkey,count) VALUES(NULL,(DATE_ADD(CURDATE(), INTERVAL -1 day),%s,%s,%s))'''


# Execute the SQL command
cursor.executemany(sql,data.values())
# Commit your changes in the database
db.commit()

# disconnect from server
cursor.close()
db.close()

感谢下面的回答,我解决了我的问题最终代码 100% 工作:) :

#!/usr/bin/python
from StringIO import StringIO
import numpy as np
import csv
import MySQLdb
import os

with open('csv_err2.log', mode='r') as infile:
reader = csv.reader(infile)
mydict = dict((rows[0],[rows[2], rows[1]]) for rows in reader)

data=mydict
print data

# Open database connection
db = MySQLdb.connect(host="localhost",user="root",passwd="bravoecholimalima",db="capacityreports_mobiletv")

cursor = db.cursor()

# Prepare SQL query to INSERT a record into the database.
sql = '''INSERT INTO errorscode (id,date,errorcode,count,eventkey) VALUES(NULL,(DATE_ADD(CURDATE(), INTERVAL -1 day)),%s,$

sql_values_list = list()
for key, value in data.iteritems():
sql_values_list.append((key,int(value[0]),value[1]))

print sql_values_list

# Execute the SQL command
cursor.executemany(sql, sql_values_list)

# Commit your changes in the database
db.commit()

# disconnect from server
cursor.close()
db.close()

最佳答案

好吧,这种方法行不通。

首先,您的情况下的 mydict.values()data.values() 将是一个列表列表:

[['0', '9'], ['playback_error', '87'], ['playback_error', '24'], ['qp_library_failed_to_start', '1'], ['parental_controls_error', '5'], ['playback_error', '141'], ['playback_error', '29'], ['playback_error', '1'], ['playback_error', '2'], ['playback_error', '28'], ['eventKey', '2'], ['playback_error', '10'], ['playback_error', '464'], ['tbr_error', '68']]

所以,如果你想迭代,你需要以下行:

sql = '''INSERT INTO errorscode (id,date,errorcode,eventkey,count) VALUES(NULL,(DATE_ADD(CURDATE(), INTERVAL -1 day),%s,%s,%s))'''

sql_values_list = list()
for key, value in data.iteritems():
sql_values_list.append((key, value[0], value[1]))

try:
# Execute the SQL command
cursor.executemany(sql, sql_values_list)
# Commit your changes in the database
db.commit()
except:
# bla

data.iteritems() 会在迭代过程中一次性检索到 key 和对应的 value,供您进一步使用。您的值是一个列表,这就是为什么要向前传递它,您需要明确地处理成员。

您将字典重组为 .executemany() 的格式并将其传递。

请注意,如果您的数据结构不是静态的,即如果您的值列表仅包含 1 个元素,那么我在示例中展示的方式可能是不安全的 - 代码将严重失败。

关于python - 从 Python 字典中插入值,包括 MySQL 的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28681715/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com