是否可以在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命令将来自多个数据库的结果合并到主数据库中。我想确保密钥是唯一的,因此我将服务器短主机名附加到密钥。
谢谢, 保罗
答案 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
"""