【发布时间】:2017-02-09 04:07:48
【问题描述】:
我花了几个月的时间认真学习 Python,我正在尝试将我的 sqlite 相关函数从我的主脚本中分离出来,但是我在将变量从主脚本传递到数据库模块时遇到了麻烦。
我有一个主脚本,它请求两个输入并将它们传递给 SELECT 查询函数...
主脚本
from db_manage import inv_enq
def main():
ord_numb = input('Enter Order Number > ')
part_numb = input('Enter Part Number > ')
inv_enq(ord_numb, part_numb)
if __name__ == "__main__":
main()
这链接到我的数据库管理脚本,该脚本有一个类,其中包含创建、查询和关闭 sqlite 连接所必需的类,以及包含我尝试运行的“inv_enq”查询的函数。
数据库脚本
import sqlite3
class DbManager(object):
def __init__(self, db):
self.conn = sqlite3.connect(db)
self.conn.commit()
self.cur = self.conn.cursor()
def query(self, arg):
self.cur.execute(arg)
self.conn.commit()
return self.cur
def __del__(self):
self.conn.close()
def inv_enq(ord_numb, part_numb):
dbmgr = DbManager("tracker.db")
for row in dbmgr.query("""SELECT * FROM inv_arch WHERE ord_num == (?) AND part_num == (?)""", (ord_numb, part_numb,)):
print(row)
我的问题是在我运行主脚本时出现的。输入订单号和零件号后,我收到以下错误...
Traceback (most recent call last):
File "...mainscript.py", line 13, in <module>
main()
File "...mainscript.py", line 10, in main
inv_enq(ord_numb, part_numb)
File "...db_manage.py", line 24, in inv_enq
for row in dbmgr.query("""SELECT * FROM inv_arch WHERE ord_num == (?) AND part_num == (?)""", part_numb, ord_numb):
TypeError: query() takes 2 positional arguments but 4 were given
我很困惑,因为我相信我只传递了两个参数,但错误显示为 4。我对这个问题的一些在线阅读导致 语法糖,但没有一个真正帮助我解决问题我哪里错了。
我们将不胜感激。
干杯。
【问题讨论】:
标签: python sqlite python-3.x