gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 08:14:30 25 4
gpt4 key购买 nike

在搜寻直到疯狂之后,我决定在这里发布一个问题。
我试图创建一个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

当paramstyle设置为named时(例如:table形式),也会发生这种情况。
我在这里找不到语法错误,因此我认为问题一定是在系统中的某个地方引起的。我在Archlinux和Debian安装上对其进行了测试,都向我发布了相同的错误。

现在由您决定,因为我已经不知道在哪里寻找原因了。

最佳答案

SQL参数仅适用于插入数据,不适用于表名。这意味着甚至没有为DDL语句解析参数。

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

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

关于python - 带有参数的python sqlite3 cursor.execute()导致语法错误? (paramstyle qmark),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19843668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com