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

带参数的python sqlite3 cursor.execute()会导致语法错误吗?(paramstyle qmark),python,sqlite,cursor,syntax-error,execute,Python,Sqlite,Cursor,Syntax Error,Execute,在搜索到《疯狂》之后,我决定在这里发布一个问题。 我尝试创建一个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, str

在搜索到《疯狂》之后,我决定在这里发布一个问题。 我尝试创建一个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()
我知道第一个参数应该是字符串形式的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
$。/test.py
回溯(最近一次呼叫最后一次):
文件“/test.py”,第21行,在
创建()
文件“/test.py”,创建中的第14行
c、 执行(sql、值)
sqlite3.0错误:靠近“”:语法错误
当paramstyle设置为named时也会发生这种情况(例如:表格形式)。 我无法在这里发现语法错误,因此我认为问题一定是由系统中的某个地方引起的。我在Archlinux和Debian安装上测试了它,它们都向我发布了相同的错误


现在轮到你了,因为我不知道去哪里寻找原因了

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

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

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

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

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

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

据我所知,您的参数是表名

所以你的命令是

tbl = 'my_table'
sql = "CREATE TABLE IF NOT EXISTS '%s' ( name TEXT, street TEXT, time REAL, age INTEGER )" % tbl

据我所知,您的参数是表名

所以你的命令是

tbl = 'my_table'
sql = "CREATE TABLE IF NOT EXISTS '%s' ( name TEXT, street TEXT, time REAL, age INTEGER )" % tbl

这是martijn答案的Python2版本这是martijn答案的Python2版本