Ubuntu下使用Python调用sqlite3执行execute失败问题求助
解决Python + sqlite3执行代码报错的问题
嘿,我帮你排查出问题啦,咱们一步步来解决:
核心错误原因
你代码里的这行是直接触发报错的关键:
c.execute(".separator \"\t\"")
.separator是SQLite命令行工具(也就是你在终端敲sqlite3进入的交互环境)专属的命令,根本不是标准SQL语句!而Python的sqlite3模块的execute()方法只能执行标准SQL,所以这行代码一跑就会报语法错误。
另外如果你的Ubuntu用的是默认的Python3(现在大部分Ubuntu版本都是),你写的print "Opened database successfully"这种无括号的print语句也会触发语法错误——Python3里print是函数,必须加括号。
修复步骤
1. 移除错误的.separator命令,换用Python方式处理制表符数据
如果你的需求是导入制表符分隔的TSV数据,咱们用Python的csv模块来处理就好,不用依赖SQLite命令行的语法。给你个完整的示例代码:
import sqlite3 import csv name = "your_db_name" # 用f-string更简洁,Python3支持 db_path = f"{name}.db" conn = sqlite3.connect(db_path) print("Opened database successfully") c = conn.cursor() # 补全你之前没写完的建表语句,把省略的字段补全 c.execute('''CREATE TABLE data_node( Time INTEGER, Node TEXT, CurSize INTEGER, SizeVar INTEGER, # 这里替换成你实际的剩余字段,比如下面的示例字段 Value FLOAT, Status TEXT )''') print("Created table data_node successfully") # 导入制表符分隔的TSV文件(假设你的数据文件叫data.tsv) with open("data.tsv", "r", encoding="utf-8") as tsv_file: # 指定分隔符为制表符 tsv_reader = csv.reader(tsv_file, delimiter="\t") # 如果你的TSV有表头,就跳过第一行 next(tsv_reader) # 逐行插入数据 for row in tsv_reader: # 用?作为占位符,避免SQL注入,同时适配数据格式 c.execute('''INSERT INTO data_node (Time, Node, CurSize, SizeVar, Value, Status) VALUES (?, ?, ?, ?, ?, ?)''', row) # 一定要提交事务,否则数据不会写入数据库 conn.commit() # 关闭连接 conn.close() print("Data imported and saved successfully")
2. 统一Python3语法
把所有print语句都加上括号,比如:
# 旧写法(Python2兼容) print "Opened database successfully" # 改成Python3兼容的写法 print("Opened database successfully")
额外提醒
- 建表语句一定要写完整!你代码里的
V...明显是截断了,要把所有字段的名称和类型都定义清楚,否则也会触发SQL语法错误。 - 执行插入、更新这类修改数据的操作后,必须调用
conn.commit(),不然所有修改都会丢失哦。
内容的提问来源于stack exchange,提问作者Silence
相关产品推荐
相关产品推荐

