首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从DB2笔记本更新中的表

从DB2笔记本更新中的表
EN

Stack Overflow用户
提问于 2020-06-04 18:07:01
回答 1查看 155关注 0票数 2

我需要用DB2 Notebook中存储在dataframe中的值更新IBM云中的列。我可以从Python Notebook连接到DB2。现在我需要用数据框中存储的值更新DB2云中表的一列。下面是我的代码,问题是我在df中有100条记录,相同的记录必须在表中更新,但与此代码10000条记录在表中更新,这意味着100*100。寻找支持

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2021-09-15 11:48:49

在几次失败的尝试之后,我想出了一种不同的思考方式,解决了你面临的问题。

简单的答案是:使用to_sql()方法将您的表读取到一个数据帧中,并使用您的新值替换接收到的表列值,然后使用pandas命令进行更新。

示例:

假设下面是您的SQL表,名为dummy_test,模式名为TEST_SCHEMA

代码语言:javascript
复制
# library versions
pandas 1.0.5
sqlachemy 1.3.17
代码语言:javascript
复制
A    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

  1. 将此表读入pandas dataframe

代码语言:javascript
复制
# 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)
代码语言:javascript
复制
# 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 1000

  1. 现在假设您要使用的值名为df_with_values_to_update且列名为A的数据帧包含要更新

的以下值

代码语言:javascript
复制
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   19

  1. db_table列'A‘值替换为df_with_values_to_update列'A’值

代码语言:javascript
复制
db_table['a'] = df_with_values_to_update['A']

  1. 使用to_sql() method

写回db2

代码语言:javascript
复制
db_table.to_sql('dummy_test', engine, schema='TEST_SCHEMA', if_exists='replace', index=False)

您可以再次从step2查询db2,以确认这些值已被替换。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62192040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档