我正在尝试将 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
你混淆了“真正的”
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)