Python SQLite3插入

Python SQLite3插入,python,sqlite,Python,Sqlite,我在插入值时出错。我的数据库有3列。此处初始化了一个自动递增整数: connection.execute("CREATE TABLE IF NOT EXISTS {tn} ({nf1} {ft1} PRIMARY KEY AUTOINCREMENT)"\ .format(tn = tableName, nf1 = "IDPK", ft1 = "INTEGER")) 和两个初始化如下的文本字段: connection.execute("ALTER TABLE {tn} ADD COLUM

我在插入值时出错。我的数据库有3列。此处初始化了一个自动递增整数:

connection.execute("CREATE TABLE IF NOT EXISTS {tn} ({nf1} {ft1} PRIMARY KEY AUTOINCREMENT)"\
    .format(tn = tableName, nf1 = "IDPK", ft1 = "INTEGER"))
和两个初始化如下的文本字段:

connection.execute("ALTER TABLE {tn} ADD COLUMN '{cn}' {ct}".format(tn = tableName, cn = "foo", ct = "TEXT"))
connection.execute("ALTER TABLE {tn} ADD COLUMN '{cn}' {ct}".format(tn = tableName, cn = "bar", ct = "TEXT"))
执行情况如下:

connection.execute("INSERT INTO {tn} VALUES (NULL, {col1}, {col2})".format(tn = tableName, col1 = text1, col2 = text2))
抛出的错误是:

sqlite3.OperationalError: no such column: "obfuscatedTextStringInText1"

我不明白为什么它认为列的名称在text1中。我用这种语法在第1列和第2列中插入一个值,作为带有NULL关键字的自动递增函数。

应该在
{col1}
{col2}
周围加引号,因为它们是作为文本值插入的。例如,当前正在对其进行评估,如下所示:

"INSERT INTO table_name VALUES (NULL, my text 1, my text 2)"
不要使用字符串格式在查询中插入变量。这是危险的(您很容易受到攻击)和错误提示(正如您已经看到的)

相反,请参数化查询:

connection.execute("""
    INSERT INTO 
        {tn} 
    VALUES 
        (NULL, :col1, :col2)""".format(tn=tableName), 
    {"col1": text1, "col2": text2})

请注意,我们-确保您验证并正确转义
表名
,或者信任您的来源。

我认为在sqlite3中null的默认值是“”。尝试只为col1和col2列添加值。