SQLite Python 游标函数错误


import sqlite3 as sql
import os 
db_folder = "D:/Python/databases/accounts.sqlite"
db = sql.connect(db_folder)
im = sql.Cursor()
im.execute("""CREATE TABLE IF NOT EXISTS 'accounts' (              
id    TEXT  DEFAULT 'account' UNIQUE             
pw    TEXT  DEFAULT 'password
email TEXT UNIQUE 
)
""")
datas = [
("eren.arc1","1236"),
("ern.arc"),
(none,none,"erenarici@gmail.com")
]
if not os.path.exists(db_folder):
for data in datas : 
im.execute("""INSERT INTO 'accounts' VALUES (?,?,?)""",datas)
db.commit()    

我运行了这段代码,但出现此错误:

File "databases/db4.py", line 6, in <module>
im = sql.Cursor()
TypeError: function takes exactly 1 argument (0 given)

问题出在哪里?我在光标函数中没有经常看到参数。 注意:我用了cursor()但后来我服用了sqlite3没有光标属性错误。然后我把它改成了Cursor().

做:

import sqlite3 as sql
import os 
sqlite_file = "db.sqlite"
conn = sql.connect(sqlite_file)
c = conn.cursor()
c.execute("""CREATE TABLE IF NOT EXISTS accounts (
id TEXT DEFAULT 'account' UNIQUE,
pw TEXT DEFAULT 'password',
email TEXT UNIQUE);""")
items = [
("id1", "pw1", "user1@gmail.com"),
("id2", "pw2", "user2@gmail.com"),
("id3", "pw3", "user3@gmail.com")
]
for item in items: 
c.execute("""INSERT INTO accounts VALUES (?,?,?);""", item)
c.execute("""INSERT INTO accounts(id, email) VALUES ('id4', 'user4@gmail.com');""")
c.execute("""INSERT INTO accounts(email) VALUES ('account@gmail.com');""")
for row in c.execute('SELECT * FROM accounts'):
print(row)
conn.commit()
conn.close()

输出:

('id1', 'pw1', 'user1@gmail.com')
('id2', 'pw2', 'user2@gmail.com')
('id3', 'pw3', 'user3@gmail.com')
('id4', 'password', 'user4@gmail.com')
('account', 'password', 'account@gmail.com')

如果您尊重每个字段的顺序,则可以检查item元组的长度以在循环中进行插入:

for item in items: 
if len(item) == 3:
c.execute("""INSERT INTO accounts VALUES (?,?,?);""", item)
elif len(item) == 2:
c.execute("""INSERT INTO accounts(pw, email) VALUES (?,?);""", item)
elif len(item) == 1:
c.execute("""INSERT INTO accounts(email) VALUES (?);""", item)

但是(none, none, 'email')在这里没有意义,要插入 NULL 数据,请使用关键字NULL(如果是 python,则None不是none(。

最新更新