我为一个科学程序(Python)创建了一个数据库(使用SQLITE3)。这个程序构建会生成循环,这些循环会逐渐构建数据库。因此,问题是使用循环添加列。我以身作则。它表明问题出在定义新列名(Name1
)的变量上。
import sqlite3
import os
conn=sqlite3.connect(':memory:')
c=conn.cursor()
c.execute('''CREATE TABLE TableName (Var1 REAL, Var2 REAL)''')
Name1='Test1'
c.execute('''ALTER TABLE TableName ADD COLUMN "+Name1+" INTEGER''')
Name1='Test2'
c.execute('''ALTER TABLE TableName ADD COLUMN "+Name1+" INTEGER''')
有谁有解决这个问题的建议吗?谢谢,祝你有愉快的一天。
1条答案
按热度按时间4smxwvx51#
字符串必须以开始它们的相同类型的引号结束。因此,
"+Name1+"
被解释为字符串的文字部分,并传递给c.execute(...)
,而不插入变量Name1
。因此,这两个新列的文字名称都是
+Name1+
,这会导致错误消息你可能想要这样的东西:
用循环重写,那将是
不过,为了避免SQL注入的风险,you shouldn't do string concatenation or manipulation on the SQL query or command。取而代之的是使用Python数据库API已经提供的参数替换:
事实上,该API将使显式循环变得不必要: