尝试将 python 字典列表转换为 SQLite 表时,我不断收到错误消息?

Posted

技术标签:

【中文标题】尝试将 python 字典列表转换为 SQLite 表时,我不断收到错误消息?【英文标题】:When trying to convert a list of python dictionaries into a SQLite table I keep getting an error? 【发布时间】:2022-01-01 09:51:19 【问题描述】:

我正在尝试使用以下代码将 python 字典列表转换为 SQLite 表。

conn = sqlite3.connect('stockData.db')
c = conn.cursor()
c.executemany(f"INSERT INTO AAPL1M2021 (time,open,high,low,close,volume) VALUES (%(t)s,%(o)s,%(h)s,%(l)s,%(c)s,%(v)s)", data)

每当我运行此代码时,它都会返回以下错误。

---------------------------------------------------------------------------
OperationalError                          Traceback (most recent call last)
<ipython-input-7-dce4eb1e6f6f> in <module>
      2 conn = sqlite3.connect('stockData.db')
      3 c = conn.cursor()
----> 4 c.executemany("INSERT INTO AAPL1M2021 (time,open,high,low,close,volume) VALUES (%(t)s,%(o)s,%(h)s,%(l)s,%(c)s,%(v)s)", data)

OperationalError: near "%": syntax error

我一定是错过了什么,因为我似乎找不到解决方案。

这是字典列表中的示例字典。

'v': 26666,
  'vw': 133.233,
  'o': 133.31,
  'c': 133.49,
  'h': 133.49,
  'l': 133.02,
  't': 1609750800000,
  'n': 87

【问题讨论】:

data 一个字典吗? 这是你的想法还是你确定你可以传递一个 dict 并使用 %(t)s 引用键?我找不到这方面的文档以及关于我认为只允许 %s 的错误的文档,并且值应该是正确的顺序 只要使用execute 【参考方案1】:

Python 的 sqlite 包不使用 %s 样式格式。它使用? 作为位置占位符或:name 作为关键字占位符。

所以你的查询可能看起来像

c.execute(
    "INSERT INTO AAPL1M2021 (time,open,high,low,close,volume) VALUES (:t, :o, :h, :l, :c, :v)", 
    data
)

请注意,executemany 用于执行多个查询的参数列表。对于单个 dict 使用 execute;使用 executemany 获取字典列表。

【讨论】:

以上是关于尝试将 python 字典列表转换为 SQLite 表时,我不断收到错误消息?的主要内容,如果未能解决你的问题,请参考以下文章

将 pyspark 数据框转换为 python 字典列表

将字典列表的 Python 数据框列转换为具有单个元素的列

Python:将字典列表转换为 json

如何使用列表和字典将字符串转换为二进制代码

Python。将 2 个列表转换为一个字典对象 [重复]

将 pandas.DataFrame 转换为 Python 中的字典列表