如何解决无法使用 argparse 从 sqlite3 读取数据
我正在尝试创建一个模块来处理 sqlite3。我的程序包含两部分:
- 基础程序
- 命令行界面(使用 argparse)
这是我没有 CLI 的程序(它可以工作):
import argparse
from sqlite3 import Error,connect
import os
class db_connector:
def __init__(self,path):
self.path = path
def create_connection(self):
connection = None
if os.path.exists(self.path):
try:
connection = connect(self.path)
print('Connected to db successfuly.')
except Error as e:
print(f'Fail to connecting,the error {e} occured.')
else:
print('The path is not exists.')
return connection
def execute_query(self,connection,query):
cursor = connection.cursor()
try:
cursor.execute(query)
connection.commit()
except Error as r:
print(f'Can\'t execue the query,error {r} occured.')
def read_query(connection,query):
cursor = connection.cursor()
result = None
try:
cursor.execute(query)
result = cursor.fetchall()
return result
except Error as e:
print(f"Can't read data,error '{e}' occurred.")
这是我的 CLI 部分:
# ------------------------------------ CLI ------------------------------------
parser = argparse.ArgumentParser(prog='db',description='sqlite DB handler')
parser.add_argument('-db','--connection-path',action='store',type=str)
parser.add_argument('-x','--execute-query',type=str,nargs=2)
parser.add_argument('-r','--read-query',nargs=2)
args = parser.parse_args()
if args.connection_path != None:
db = db_connector(args.connection_path)
connection = db.create_connection()
if args.execute_query != None:
db = db_connector(args.execute_query[0])
connection = db.create_connection()
query = args.execute_query[1]
db.execute_query(connection,query)
if args.read_query != None: # Problem is here!!!
db = db_connector(args.read_query[0])
connection = db.create_connection()
query = args.read_query[1]
print(db.read_query(connection,query))
要知道如何使用它,在终端中编写此命令就足够了:
program -h
Program 是我的 python 文件的名称。 在我的数据库 db.sqlite3 中,我有一个带有名称、密码和许可证的服务器表。 当我写:
program -r db.sqlite3 "select * from servers"
我得到了:
Connected to db successfuly.
Traceback (most recent call last):
File "G:\Programmng language\Python\Projects\Todo\server\db.py",line 67,in <module>
print(db.read_query(connection,query))
TypeError: read_query() takes 2 positional arguments but 3 were given
请帮我解决这个问题。
解决方法
由于 read_query()
是一个类属性,Python 默认会将实例的引用传递给方法。
为了解决这个问题,您需要提供一个额外的参数来保存引用(通常称为 self
),例如:
def read_query(self,connection,query):
# ...
或者,由于您不需要自我引用,请将其设为 staticmethod
,即:
@staticmethod
def read_query(connection,query):
# ...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。