带参数的python sqlite3 cursor.execute()导致语法错误附近?(paramstyle qmark)

0 python sqlite execute syntax-error cursor

在搜索到直到疯狂之后,我决定在这里发一个问题.我尝试创建一个sqlite3数据库,我想利用cursor.execute(SQL,param)函数的安全变量替换函数.我的功能是这样的:

#!/usr/bin/env python3
#-*- coding: utf-8 -*-

import sqlite3

def create():
    values = ("data")
    sql = "CREATE TABLE IF NOT EXISTS ? ( name TEXT, street TEXT, time REAL, age INTEGER )"

    con = sqlite3.connect("database.db")
    c = con.cursor()
    c.execute(sql, values)
    con.commit()
    c.close()
    con.close()

if __name__ = "__main__":
    create()
Run Code Online (Sandbox Code Playgroud)

我知道第一个参数应该是字符串形式的sql命令,第二个参数必须是应该替换的值的元组?在sql字符串中.但是,当我运行该文件时,它返回以下错误:

$ ./test.py 

Traceback (most recent call last):
  File "./test.py", line 21, in <module>
    create()
  File "./test.py", line 14, in create
    c.execute(sql, values)
sqlite3.OperationalError: near "?": syntax error
Run Code Online (Sandbox Code Playgroud)

当paramstyle设置为named(例如:table表单)时,也会发生这种情况.我在这里找不到语法错误,所以我认为问题必定是在系统中的某个地方引起的.我在Archlinux和Debian安装上测试了它,都给我发了同样的错误.

现在你好了,因为我不知道在哪里寻找原因.

Mar*_*ers 5

SQL参数只能应用于插入数据,而不能应用于表名.这意味着甚至不会为DDL语句解析参数.

为此你必须使用字符串格式:

sql = "CREATE TABLE IF NOT EXISTS {} ( name TEXT, street TEXT, time REAL, age INTEGER )".format(*values)
Run Code Online (Sandbox Code Playgroud)