INSERT INTO .... SELECT ...使用Python中的变量

时间:2012-10-15 17:43:10

标签: python sqlite variables select insert

是否可以在sqlite中使用Python变量连接?

例如,给出此示例代码:

conn=sqlite3.connect(...)
cursor=conn.cursor()

short_hostname = commands.getoutput('hostname -s')

sql='''
    INSERT INTO history
    SELECT id || '-' || ?, foo, bar, baz
    FROM info
'''
cursor.execute(sql,short_hostname)
conn.commit()

我收到此错误:TypeError: unsupported operand type(s) for -: 'str' and 'str' 我实际上使用attach命令将来自多个数据库的结果合并到主数据库中。我想确保密钥是唯一的,因此我将服务器短主机名附加到密钥。

谢谢, 保罗

2 个答案:

答案 0 :(得分:3)

哦,天哪!这是OP的评论,万一有人错过了它:

  

我的实际代码是这样的:

> cursor.execute('ATTACH "/home/vivisimo/reporting/temp.db" AS toMerge') 
> cursor.execute('INSERT INTO application SELECT id || '-' || ?, key, value FROM toMerge.application', [self.short_hostname])

NOT 与您发布的问题相同。真正的代码有一个相当明显的问题,即INSERT语句用三引号括起来,因此你真的 要求Python从字符串中减去字符串。

cursor.execute('''INSERT INTO application SELECT id || '-' || ?, key, value FROM toMerge.application''', [self.short_hostname])

(正如你在原来的问题中所说的那样),一切都会好起来的。

答案 1 :(得分:0)

我很确定问题出在您的Python代码中,而不是SQLite。

按如下方式重写代码应修复它:

sql="""
    INSERT INTO history
    SELECT id || '-' || ?, foo, bar, baz
    FROM info
"""