带有占位符的 cur.executescript 运算符的奇怪工作

问题描述 投票:0回答:1

我正在尝试将 cur.executescript 运算符与带有占位符的 INSERT 语句一起使用

import sqlite3
conn = sqlite3.connect('SingleTableSql.sqlite')
cur = conn.cursor()
cur.execute('DROP TABLE IF EXISTS Track')
cur.execute('CREATE TABLE Track (title TEXT, plays INTEGER)')

cur.executescript("""
    INSERT INTO Track (title, plays) VALUES (?, ?), ('Thunderstruck', 20);
    INSERT INTO Track (title, plays) VALUES (?, ?), ('My Way', 15);
""")

conn.commit()
cur.execute('SELECT title, plays FROM Track')
for row in cur:
    print(row)
cur.close()

但是工作结果很奇怪。

(None, None)
('Thunderstruck', 20)
(None, None)
('My Way', 15)

为什么?怎么修? 预期结果是

('Thunderstruck', 20)
('My Way', 15)

Python 3.12

python sqlite
1个回答
0
投票

你混淆了“真正的”

sqlite
语法和Python中的
sqlite3

executescript
期望“真正的”sqlite语法,但你正在证明
executemany

这里要进行更改

sqlite_cmd = """
INSERT INTO Track (title, plays) VALUES ('Thunderstruck', 20);
INSERT INTO Track (title, plays) VALUES ('My Way', 15);
"""
cur.executescript(sqlite_cmd)
© www.soinside.com 2019 - 2024. All rights reserved.