大佬们,请教一个 Python 下关于 duckdb 的数据导入很诡异的问题,困扰了我两天,不胜感激。

8 天前
 llonglongago
大佬们,请教一个 Python 下关于 duckdb 的数据导入很诡异的问题,困扰了我两天,不胜感激。

背景:
最近在搞一个小爬虫,用到了 duckdb 需要在导入的时候进行去重更新,因为导入的时候跨越数据时间久远无法在代码中就实现去重,只能通过 duckdb 的数据库机制去重

表结构如下
CREATE TABLE IF NOT EXISTS ticai (
"一级类目" TEXT,
"一级类目" TEXT,
"人数" BIGINT,
UNIQUE("一级类目", "一级类目"))

data_df 为一个 frame
columns 为列名
placeholders 为占位符个数

代码:
#拼接导入语句 INSERT OR REPLACE INTO 将现有行的每一列更新为要插入的行的新值
sql_str = f'"""INSERT OR REPLACE INTO ticai ({columns}) VALUES ({placeholders})"""'
#duckdb 执行批量导入
con.executemany(sql_str, data_df.values.tolist())

症状:
使用拼接语句执行 con.executemany ()就一直报错,结果如下
duckdb.duckdb.ParserException: Parser Error: syntax error at or near """"INSERT OR REPLACE INTO ticai (""

但是使用打印出来的 sql_str 拼接语句就能执行成功
con.executemany("""INSERT OR REPLACE INTO ticai ("一级类目", "二级类目", "人数") VALUES (?, ?, ?)""", data_df.values.tolist())

结果如下:<duckdb.duckdb.DuckDBPyConnection object at 0x000001586624C2F0>

超级诡异,我不是很精通 Python ,也木有在其他平台找到问题的症结,球球大佬们帮忙解答下
690 次点击
所在节点    Python
2 条回复
customsshen
8 天前
单引号和双引号不能包含三引号
llonglongago
8 天前
@customsshen
好使,感谢,确实是我基础不牢了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1071903

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX