【问题标题】:Update SQL column Type Text with a DateTime type from Dataframe column使用 Dataframe 列中的 DateTime 类型更新 SQL 列 Type Text
【发布时间】:2020-12-18 18:19:19
【问题描述】:

我有一个数据框。其中一列是时间戳类型。我的 SQL 列是 TEXT 类型。我需要使用数据框中的列更新 SQL 表中的记录。

根据 pysqlite 教程,我需要将其转换为列表,然后使用索引创建一个元组,以便能够更新 SQL 表。但它被拒绝了,因为它说“InterfaceError:错误绑定参数 0 - 可能是不受支持的类型”。感谢您的帮助!

cursor = con.cursor()
DynamicTPIndex = DynamTPs.index.values.tolist()
DynTP = DynamTPs['Dynamic_TP_1_lane_Time'].tolist()
cursor = con.cursor()
sql_update_queryTP = '''UPDATE GBPAUD_TA SET Dynamic_TP_1_lane_Time = ? WHERE Ticket = ?''' 
dataTP = zip(DynTP, DynamicTPIndex)
cursor.executemany(sql_update_queryTP, dataTP)
con.commit()
con.close()

几件事:我的日期时间格式是 ISO8601 格式。 样本数据:

Ticket  Dynamic_TP_1_lane_Time     Dynamic_TP_1_lane_Price
356137189   2020-06-01 06:17:00    1.8423
356178592   2020-06-01 08:30:00    1.8392
356188961   2020-06-01 09:13:00    1.836
356666230   2020-06-02 17:00:00    1.8281
356782143   2020-06-02 17:58:00    1.8219
356810290   2020-06-02 20:09:00    1.8217
356893467   2020-06-03 03:16:00    1.8167

我尝试从这里用合并功能替换 zip:https://www.geeksforgeeks.org/python-merge-two-lists-into-list-of-tuples/。绑定同样的错误

【问题讨论】:

  • 您正在尝试将Dynamic_TP_1_lane_Time 列分配给一个列表,这没有多大意义(它需要是一个标量值)。请在此处解释您的感知逻辑。
  • 不是我的逻辑。只是尝试做某事,然后按照我找到的拼凑指导进行操作。这篇文章来自pynative.com/python-sqlite-update-table,在“Python 使用游标的 executemany() 更新 SQLite 表的多行”一节中。他在那里用 executemany() 说,你正在传递一个列表......?
  • 好的,我明白了。也许包括您绑定的数据以及类型,因为这似乎是错误的原因。
  • 根据上面提供的数据,索引(“Ticket”)是分配给变量 DynamicTPIndex 的第一个列表,第一列(“Dynamic_TP_1_lane_Time”)是分配给 DynTP 的第二个列表。您需要将这些单独发布在上面吗?

标签: python sqlite


【解决方案1】:

经过多次排查,我终于发现 dtype 是 pandas 时间戳。 SQL 不能接受这个 dtype。它需要 python datetime dtype 才能导入 SQL。因此,对于日期时间列,我需要:

Date_object = DynamTPs['Dynamic_TP_1_lane_Time'].dt.to_pydatetime()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-01
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 2018-09-16
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    相关资源
    最近更新 更多