我想在动态mysql表中添加一些python-dictionary数据,但是我被困在第12行:
## INSERT DATA TO TABLE
for key,val in j_decoded["one-wire"].items():
try:
rom = key.encode('utf-8')
temperatuur = val["temperatuur"]
createsqltable = """CREATE TABLE IF NOT EXISTS `%s` (
id INT PRIMARY KEY AUTO_INCREMENT,
created_on TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
timestamp TIMESTAMP,
temp FLOAT)""" % (rom)
cursor.execute(createsqltable)
cursor.execute("""INSERT INTO %s (timestamp, temp) VALUES (%s,%s)""",(rom,timestampdata,temperatuur))
db.commit()
except:
db.rollback()
## CLOSE THE DATABASE
db.close()
创建表格。但数据永远不会成功。
在上面的代码之前,我有一些其他代码可以工作,但我对表名不满意。我在第10行写了一些内容:
temp FLOAT)""" % (`rom`)
这将表创建为'tablename'而不是tablename
我在第12行进行了以下更改:(参见第一个`%s`)
cursor.execute("""INSERT INTO `%s` (timestamp, temp) VALUES (%s,%s)""",(rom,timestampdata,temperatuur))
将数据很好地添加到'tablename'表中
现在我删除了一些`并且表创建好了,但是数据永远不会出现在表中。 我已经阅读了其他人的一些帖子,但我似乎无法解决它(我想我已经尝试了所有'''组合)
祝你圣诞快乐:)
2014-01-04我已将代码更改为:
cursor.execute("""INSERT INTO {0} (timestamp, temp) VALUES (%s,%s)""".format(a), (b,c))
答案 0 :(得分:1)
尝试更改
cursor.execute("""INSERT INTO `%s` (timestamp, temp) VALUES (%s,%s)""",(rom,timestampdata,temperatuur))
到
cursor.execute("""INSERT INTO `%s` (timestamp, temp) VALUES (%s,%s)""" % (rom,timestampdata,temperatuur))
这可能只是字符串格式错误。如果你正在使用python 3,还有另一种方法可以做到这一点。我建议使用python3方法,如果它可用。有关详细信息,请查看http://www.diveintopython3.net/strings.html#formatting-strings
此外,在createsqltable变量中,您需要更改
temp FLOAT)""" % (rom)
到
temp FLOAT)""" % (rom,)
可能导致错误。
答案 1 :(得分:1)
我尝试了不同的可能性,并提出了以下工作解决方案:
sql = "insert into %s (timestamp, temp) values (%s)" % (a, "%s, %s")
cursor.execute(sql,(timestampdata,temperatuur))
或
def datainsertdef(a,b,c):
cursor.execute("""INSERT INTO `{0}` (timestamp, temp) VALUES (%s,%s)""".format(a), (b,c))