【发布时间】:2021-05-20 11:32:48
【问题描述】:
我每天需要更新大量数据(大意味着>3MB)。我想将它存储为 JSON,但据我所知,SQLAlchemy 不支持从 JSON 转换。所以现在我正在尝试用 Pickle 来做这件事。目前,我将我拥有的每个产品都存储在一个巨大的 Pickle 文件中,以便稍后将其重新加载并提交。但是,我不断收到错误消息,说我的产品类未映射,我不确定这意味着什么或如何修复它。我在谷歌搜索时遇到的所有内容都与我的代码一点也不相似。 这是我的产品类别:
class Product:
id = ""
name = ""
store_name = ""
brand = ""
price = ""
amount = ""
info = ""
image = ""
这是我的 Pickle / 数据库代码:
def loadall():
with open('products.txt', mode='rb') as products_txt:
while True:
try:
yield pickle.load(products_txt)
except EOFError:
break
Session = sessionmaker(bind=db)
session = Session()
products = loadall()
with db.connect() as conn:
session.add_all(products)
session.commit()
【问题讨论】:
-
我明白这不是你的问题,但是SqlAlchemy 显然支持JSON as a data type 现在,sqlalchemy 的目标不是从JSON 或任何其他数据格式转换;但这可以使用 python 标准库json module 轻松完成,我更喜欢使用它而不是 pickle。
-
如果它可以帮助我解决我的问题,我很乐意尝试一下!我一直在寻找和摆弄您链接的 JSON 实现,但我无法让它工作。他们使用 table.insert(),但我在本地没有表,我只是从我的桌面连接到它。你可能知道我该如何解决这个问题吗?
-
如果您使用 ORM,您可以通过访问
Product.__table__来获取表格。但你不需要。但是如果你想在数据库上使用 JSON 列,你的表的设计会有所不同:你将拥有 JSON 列,它将一些属性存储为 JSON。我不建议你对像你这样定义明确的属性这样做。我只想指出 sqlalchemy 可以处理 JSON。
标签: python-3.x sqlalchemy pickle