psycopg2插入timestamp报not all arguments converted错误如何解决
问题原因
- SQL语句语法错误:你的INSERT语句存在两处格式问题:一是列名和实际表结构不匹配,你表中存储文本的字段为
text_data、时间字段为time_stamp,原语句写的列名text不存在,也未声明时间字段;二是VALUES子句格式错误,多写了无效的(dt,)片段,且第一个占位符括号末尾多了冗余逗号,最终仅声明了2个占位符。 - 参数数量不匹配:你传入执行方法的参数有3个(
text、id、dt),但原SQL只有2个占位符,多余的参数无法匹配,因此触发字符串格式化错误。
修正后的代码
try: # 列名与表结构对齐,3个占位符对应3个传入参数 postgres_insert_query = """INSERT INTO tweets (text_data, userid, time_stamp) VALUES (%s, %s, %s)""" insertion_data = (text, id, dt) cursor.execute(postgres_insert_query, insertion_data) connection.commit() except (Exception, psycopg2.Error) as error: print("failed", error) finally: if connection: cursor.close() connection.close() print("closed")
注意事项
- psycopg2原生适配Python的datetime类型,只要你的
dt变量是带时区信息的datetime对象,就可以直接传入匹配timestamp with timezone类型的字段,不需要额外做字符串格式化。 - 如果
dt是字符串格式的时间值,建议先转换为带时区的datetime对象再传参,避免出现时区偏移异常。
内容的提问来源于stack exchange,提问作者Frevelman
相关产品推荐
相关产品推荐

