#!/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
当paramstyle设置为named(例如:table表单)时,也会发生这种情况。 我在这里找不到语法错误,所以我认为问题必定是在系统中的某个地方引起的。我在Archlinux和Debian安装上测试了它,都给我发了同样的错误。
现在你好了,因为我不知道在哪里寻找原因。
答案 0 :(得分:5)
SQL参数只能应用于插入数据,而不能用于表名。这意味着甚至不会为DDL语句解析参数。
为此你必须使用字符串格式:
sql = "CREATE TABLE IF NOT EXISTS {} ( name TEXT, street TEXT, time REAL, age INTEGER )".format(*values)
答案 1 :(得分:0)
据我了解,您的参数是表名?
所以你的命令将是
tbl = 'my_table'
sql = "CREATE TABLE IF NOT EXISTS '%s' ( name TEXT, street TEXT, time REAL, age INTEGER )" % tbl