gpt4 book ai didi

python - 如何使用 sqlalchemy 将数据加载到现有数据库表中?

转载 作者:可可西里 更新时间:2023-11-01 06:47:47 25 4
gpt4 key购买 nike

我的数据从 excel 文件加载并组织为 python dict,其中每个键都是数据库表名,其值定义为字典列表(行)

system_data = {table_name1:[{'col_1':val1, 'col2': val1...},
{'col_1':val2, 'col2': val2..}..],
table_name2:[{},{}..],[{},{}..]..}

此数据需要加载到现有数据库中,同时从 system_data 中选取 table_names 键和值。

此外,我还使用按特定顺序创建的 ordered_table 列表,以避免在加载数据时出现 FK 问题。

这是代码(我试过的 1000 个版本之一):

from sqlalchemy import create_engine
from sqlalchemy.sql import insert

def alchemy_load():
system_data = load_current_system_data()
engine = create_engine('mysql+pymysql://username:password@localhost/my_db')
conn = engine.connect()
for table_name in ordered_tables:
conn.execute(insert(table_name, system_data[table_name]))
print("System's Data successfully loaded into Database!")

此函数产生以下错误:

"TypeError: 'method' object is not iterable"

我几乎一整天都在这些东西上浪费了 (((

所有在线示例都描述了用户使用 MetaData 并创建自己的表时的情况......没有任何关于如何将数据实际添加到现有表中的内容。

使用“数据集”库可以解决我的问题。

代码:

import dataset

def current_data():
db = dataset.connect(url='mysql+pymysql://user:pass@localhost/my_db')
system_data = load_current_system_data()

for table_name in ordered_tables:
db[table_name].insert_many(system_data[table_name])
print("System's Data successfully loaded into Database!")

但是,我不知道如何使用 sqlalchemy 实现此代码...

我们将不胜感激。

最佳答案

使用 SQLAlchemy 的一种可能解决方案 metadata会像这样:

In [7]:

from sqlalchemy.schema import MetaData
meta = MetaData()
meta.reflect(bind=engine)

In [20]:

for t in meta.tables:
for x in engine.execute(meta.tables[t].select()):
print x
(1, u'one')
(2, u'two')
(1, 1, 1)
(2, 1, 2)
(3, 2, 0)
(4, 2, 4)

(我使用 select 而不是 insert 并将其应用到我用于试验的愚蠢数据库。)

希望对您有所帮助。

编辑:评论后,我添加一些说明。

MetaData() 中,tables 是模式中表的字典。字典按表名排列,实际上与代码中的字典非常相似。您可以像这样迭代元数据,

for table_name, table in meta.tables.items():
for x in engine.execute(table.select()):
print x

或者,尝试将其调整到您的代码中,您可以做类似的事情,

for table_name in ordered_tables:
conn.execute(meta.tables[table_name].insert_many(system_data[table_name]))

关于python - 如何使用 sqlalchemy 将数据加载到现有数据库表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31501999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com