-2

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

例如,给定以下示例代码:

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

谢谢,保罗

4

2 回答 2

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])

这与您发布的问题不同实际代码有一个相当明显的问题,即 INSERT 语句没有用三引号括起来,因此您实际上是在要求 Python 从字符串中减去字符串。

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

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

于 2012-10-15T18:37:49.553 回答
0

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

如下重写代码应该可以解决它:

sql="""
    INSERT INTO history
    SELECT id || '-' || ?, foo, bar, baz
    FROM info
"""
于 2012-10-15T17:49:26.860 回答