我需要用DB2 Notebook中存储在dataframe中的值更新IBM云中的列。我可以从Python Notebook连接到DB2。现在我需要用数据框中存储的值更新DB2云中表的一列。下面是我的代码,问题是我在df中有100条记录,相同的记录必须在表中更新,但与此代码10000条记录在表中更新,这意味着100*100。寻找支持
tuple_of_tuples = tuple([tuple(x) for x in df.values])
load_db2_sql = "UPDATE schema.tablename SET Columnname = ?"
stmt = ibm_db.prepare(conn, load_db2_sql)
ibm_db.execute_many(stmt, tuple_of_tuples)发布于 2021-09-15 11:48:49
在几次失败的尝试之后,我想出了一种不同的思考方式,解决了你面临的问题。
简单的答案是:使用to_sql()方法将您的表读取到一个数据帧中,并使用您的新值替换接收到的表列值,然后使用pandas命令进行更新。
示例:
假设下面是您的SQL表,名为dummy_test,模式名为TEST_SCHEMA。
# library versions
pandas 1.0.5
sqlachemy 1.3.17A B C
1 10 100
2 20 200
3 30 300
4 40 400
5 50 500
6 60 600
7 70 700
8 80 800
9 90 900
10 100 1000# define execution engine using sqlalchemy create_engine()
# method with your db params
engine = sqlalchemy.create_engine('ibm_db_sa://{user}:{pwd}@{host}:{port}/{db};SECURITY=SSL'.format(
user=params['username'],
pwd=params['password'],
host=params['hostname'],
port=params['port'],
db=params['database']
))
db_table = pd.read_sql('SELECT * FROM TEST_SCHEMA.dummy_test', engine)# show table output
db_table
a b c
0 1 10 100
1 2 20 200
2 3 30 300
3 4 40 400
4 5 50 500
5 6 60 600
6 7 70 700
7 8 80 800
8 9 90 900
9 10 100 1000df_with_values_to_update且列名为A的数据帧包含要更新的以下值
df_with_values_to_update
A
0 10
1 11
2 12
3 13
4 14
5 15
6 16
7 17
8 18
9 19db_table列'A‘值替换为df_with_values_to_update列'A’值db_table['a'] = df_with_values_to_update['A']to_sql() method写回db2
db_table.to_sql('dummy_test', engine, schema='TEST_SCHEMA', if_exists='replace', index=False)您可以再次从step2查询db2,以确认这些值已被替换。
https://stackoverflow.com/questions/62192040
复制相似问题