python - 尝试手动复制 sqlite 行时出现无法识别的令牌错误
问题描述
在 SQLite 中转储一些值时遇到了一些麻烦,因为我已经在代码的其他地方成功实现了相同的结构,所以我不太清楚。基本上,我使用以下结构传递列名和值列表来更新数据库:
def add_data(conn, primary_key, *args: tuple):
conn.set_trace_callback(print)
# --- Separate columns and values ---
columns = []
values = []
for arg in args:
columns.append(arg[0])
values.append(arg[1])
columns.append('timestamp')
values.append(str(datetime.datetime.now()))
# --- Read the SQL Dataframe ---
df = pd.read_sql_query("SELECT * FROM projtable ORDER BY ID DESC LIMIT 1;", conn)
latest_ID = list(df['ID'][-1:])[0]
# --- Primary Key Does Not Exist: make a new row ---
if primary_key == None:
columns.append('ID')
values.append(latest_ID + 1)
exec_text = 'INSERT INTO projtable (' + ','.join(columns) +') values(' + ','.join(['?'] * len(values)) + ')'
conn.execute(exec_text, values)
# --- Primary Key Exists: update an existing row ---
else:
exec_text = 'UPDATE projtable SET '
for col, val in zip(columns, values):
exec_text += f"`{col}` = ?, "
exec_text = exec_text[:-2]
exec_text += f' WHERE ID = {int(primary_key)}'
conn.execute(exec_text, values)
# --- Commit and Kill ---
conn.commit()
return 'success'
def add_column(conn, column_name, column_type, default):
exec_text = f'ALTER TABLE projtable ADD COLUMN {column_name} {column_type} DEFAULT {default}'
conn.execute(exec_text)
conn.commit()
return 'success'
我正在传递要在此数据库中更新的大量值列表,其中 primary_key 变量设置为 None 以使用以下格式创建新行,该格式到目前为止工作良好:
status = add_data(
conn,
primary_key,
('column name 1', value1),
('column name 2', value2),
.
.
.
('column name x', valuex))
在为一个很长的列表运行代码时,我在列表的最后一行遇到了一个无法识别的令牌错误,该错误引用了一个较早的令牌 - 具体行如下所示:
('1_aux_loss', 0.1),
我已经看到列名以数字开头的其他问题,但完全相同的结构在其他代码部分中运行良好,没有问题(我在另一部分代码中以相同的方式更新相同的参数)。我唯一能想到的是,我传递的列表在这里更长,但我很难理解是什么导致了这个错误。基本上我试图在 sqlite 数据库中获取现有行并将一些关键变量(~80)复制到新行。
解决方案
推荐阅读
- flutter - Flutter ios 版本大小比 apk 版本大得多
- javascript - 相同的事件发射只发生一次而不是 2
- c# - ORA-00933: SQL command not properly ended in my net.MVC application
- java - How to convert complex SQL query to JPQL?
- postgresql - Postgresql (pgAdmin 4) - How to change in system settings decimal separator from dots to commas
- c# - 创建一个只能以T为参数的方法
- redis - 如何按位置而不是 ID 获取 Redis 流中的记录?
- python - 当我遍历字典时缺少项目
- javascript - 关于css中的一个div和Button函数
- python - 如何在pyQt中打印控制台输出