使用Python创建SQLite表后,sqlite3命令行无法访问该表的问题
问题分析与解决方案
我一眼就揪出了最可能的问题——你在sqlite3命令行里大概率没正确连接到clients.db文件!
核心问题:命令行未指定目标数据库
当你直接在终端敲sqlite3进入命令行时,默认会创建一个内存中的临时数据库,这个临时库和Python脚本生成的clients.db完全是两个独立的文件,所以你在临时库里自然找不到main表。
解决步骤
在终端里,你需要明确指定要连接的数据库文件:
sqlite3 clients.db
进入命令行后,再执行查询:
SELECT * FROM main;
这样就能看到你用Python插入的数据了。
额外优化:修复SQL注入风险
另外,你的代码里用字符串格式化拼接INSERT语句的做法存在严重的SQL注入风险,而且如果数据里包含单引号(比如用户名为O'Neil),会直接导致SQL语法错误。应该改用sqlite3支持的参数化查询:
把原来的INSERT代码:
db.execute('''INSERT INTO main VALUES ('{idn}', '{name}', '{email}', '{add}');'''.format(idn=i, name=row['name'], email=row['email'], add=row['address']))
替换成:
db.execute('INSERT INTO main VALUES (?, ?, ?, ?)', (i, row['name'], row['email'], row['address']))
参数化查询会自动处理字符串转义,同时彻底避免SQL注入问题,这是操作数据库的最佳实践。
其他排查点(如果上面的方法没解决)
- 确认Python脚本运行时没有抛出异常:比如如果
CREATE TABLE语句执行失败(比如表已存在),后续的INSERT会报错,但你可能没捕获异常。可以在代码里添加异常捕获:try: db.execute('''CREATE TABLE main( ID INT PRIMARY KEY NOT NULL, name VARCHAR, email VARCHAR, address VARCHAR);''') except sqlite3.OperationalError as e: print(f"创建表时出错: {e}") - 检查
clients.db的权限:确保你在命令行里有读取这个文件的权限,可以用ls -l clients.db查看权限设置。
内容的提问来源于stack exchange,提问作者ygeyzel
相关产品推荐
相关产品推荐

