为了账号安全,请及时绑定邮箱和手机立即绑定

如何修复sqlite3中给出的python3 args

如何修复sqlite3中给出的python3 args

qq_遁去的一_1 2022-05-19 18:37:03
我正在设置一个新的烧瓶应用程序,并且我正在使用 sqlite3 作为数据库。即使我必须插入 5 个值,是否可以保持设置?def encrypt():    now = datetime.now()    date_time = now.strftime("%d/%m/%Y - %H:%M")    filename = secure_filename(request.form['filename'].replace(" ", "_").replace("(", "").replace(")", ""))    password = request.form['password']    username = session.get('username')    id = request.form['id']    type = infile[-4:]    file = filename[:-4] + '.enc'    infile = os.path.join(app.config['DATA_FOLDER'], filename)    outfile = os.path.join(app.config['DATA_FOLDER'], filename[:-4] + '.enc')    con = sqlite3.connect(app.config['DataBase'])    cur = con.cursor()    cur.executemany('INSERT INTO keys (id, file, type, date_time, attempts) VALUES (?,?,?,?,?)', id, file, type, date_time, "0")    con.commit()    con.close()    return 'ok'日志中显示以下错误:File "./myapp.py", line 524, in encrypt    cur.executemany('INSERT INTO keys (id, file, type, date_time, attempts) VALUES (?,?,?,?,?)', id, file, type, date_time, "0")TypeError: function takes exactly 2 arguments (6 given)
查看完整描述

1 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

executemany首先,当您想将多行插入单个表时,您不需要使用它。您所拥有的只是代表单行的多个值。对 SQL 语句中的值使用占位符,并将元组作为第二个参数传递给execute.


cur.execute('INSERT INTO keys (id, file, type, date_time, attempts) VALUES (?, ?, ?, ?, ?)', (id, file, type, date_time, "0"))



奖励答案(executemany 案例)


现在,当您想在同一个表中插入多行时,您将使用该cursor.executemany方法。这需要 2 个参数,就像您在上面的错误中发现的那样:


一个字符串,代表 SQL 查询

参数集合,其中每个参数是代表一行的值列表

对集合中的所有参数执行 sql 查询。


两者的工作示例execute,executemany可以粘贴到 Python 文件中并运行


import sqlite3


conn = sqlite3.connect(':memory:')


cursor = conn.cursor()

cursor.execute('CREATE TABLE person (first_name text, last_name text, age integer)')

cursor.execute('SELECT * FROM person')

print(cursor.fetchall())  # outputs []


first_name, last_name, age = 'Carl', 'Cox', 47

cursor.execute('INSERT INTO person (first_name, last_name, age) VALUES (?, ?, ?)', (first_name, last_name, age))

cursor.execute('SELECT * FROM person')

print(cursor.fetchall())  # outputs [('Carl', 'Cox', 47)]


many_values = [

    ('Boris', 'Brejcha', 37),

    ('Mladen', 'Solomun', 43),

]

cursor.executemany('INSERT INTO person (first_name, last_name, age) VALUES (?, ?, ?)', many_values)

cursor.execute('SELECT * FROM person')

print(cursor.fetchall())  # outputs [('Carl', 'Cox', 47), ('Boris', 'Brejcha', 37), ('Mladen', 'Solomun', 43)]


conn.close()

因此,您会看到executemany该方法仅采用 2 个参数,但第二个参数是一个序列序列。


查看完整回答
反对 回复 2022-05-19
  • 1 回答
  • 0 关注
  • 105 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信