Python - 在动态表中添加mysql条目

时间:2013-12-26 01:22:19

标签: python mysql

我想在动态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))

2 个答案:

答案 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))