Python SQLite3-Ins

2024-09-27 04:19:36 发布

您现在位置:Python中文网/ 问答频道 /正文

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

connection.execute("CREATE TABLE IF NOT EXISTS {tn} ({nf1} {ft1} PRIMARY KEY AUTOINCREMENT)"\
    .format(tn = tableName, nf1 = "IDPK", ft1 = "INTEGER"))

初始化了两个文本字段:

^{pr2}$

处决在这里:

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关键字的autoincrement函数。在


Tags: 数据库formatexecutecreatetable整数connectionnull
2条回答

不要使用字符串格式在查询中插入变量。这很危险(您很容易受到SQL injection attacks)和错误提示(如您所见)。在

相反,参数化查询:

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

请注意,我们cannot parameterize table or column names-确保您验证并正确转义tableName,或者信任您的来源。在

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

"INSERT INTO table_name VALUES (NULL, my text 1, my text 2)"

相关问题 更多 >

    热门问题