You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用argparse时无法从SQLite3读取数据的问题排查与修复请求

修复 SQLite3 Python 模块的 read_query 方法错误

这个错误的根源很明确:你的read_query是类的实例方法,但定义时没有包含第一个必填的self参数,导致调用时参数数量不匹配。

错误原因解析

当你通过类的实例(比如db.read_query(...))调用方法时,Python会自动把实例本身作为第一个参数传递给方法。而你原来的read_query方法定义是:

def read_query(connection, query):

这意味着当你执行db.read_query(connection, query)时,实际传递的参数是(db, connection, query)——总共3个参数,但方法只接受2个,所以抛出TypeError。

修复方案

只需要给read_query方法加上self作为第一个参数即可,修改后的方法定义如下:

def read_query(self, 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部分存在重复创建db_connector实例的问题——比如用户同时指定-db和-r参数时,会重复初始化连接。可以优化一下逻辑,避免重复操作:

# 优化后的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', action='store', type=str, nargs=2, metavar=('DB_PATH', 'QUERY'))
parser.add_argument('-r', '--read-query', action='store', type=str, nargs=2, metavar=('DB_PATH', 'QUERY'))

args = parser.parse_args()

# 统一处理连接逻辑
db = None
connection = None
if args.connection_path:
    db = db_connector(args.connection_path)
    connection = db.create_connection()

# 执行查询
if args.execute_query:
    if not db:
        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:
    if not db:
        db = db_connector(args.read_query[0])
        connection = db.create_connection()
    query = args.read_query[1]
    print(db.read_query(connection, query))

测试验证

修改后再执行你的测试命令:

program -r db.sqlite3 "select * from servers"

应该会正常输出查询结果,不再抛出错误。

内容的提问来源于stack exchange,提问作者mahdi paydarpuya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 20:02:32