在Python中将列表数据插入DB2

px9o7tmv  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(282)

我在python中将元组列表插入DB2数据库时遇到了这个问题,
我以前的任务是创建一个包含所有数据的变量
但我无法将数据插入数据仓库,
这是我在上一个任务中代码

def get_latest_records(rowid):
    MySQL_query = "SELECT * FROM sales_data WHERE rowid > %s"
    cursor.execute(MySQL_query, (rowid,))
    result = cursor.fetchall()
    return result

new_records = get_latest_records(last_row_id)
print("New rows on staging datawarehouse = ", len(new_records))
print(type(new_records))
print(new_records[0:2])

output showing sample data
假设我有一个包含数据列表的变量,我尝试将该数据插入DB2 Warehouse
我希望将每个元组作为行(12290、6715、80213、1)插入数据库
记录12290插入到数据库中的rowid中的数字
和6715插入到产品ID中
80213插入到客户标识
1个插入到数量
这是数据库模式
database schema
我试了这个代码

def insert_records(records):
    Db2_Insert = "INSERT INTO SALES_DATA VALUES(?,?,?,?);"
    prepare = ibm_db.prepare(conn, Db2_Insert)
    ibm_db.execute(prepare, (records,))

insert_records(new_records)
print("New rows inserted into production datawarehouse = ", len(new_records))

无法工作exception error
谢谢你的帮助。

bcs8qyzn

bcs8qyzn1#

避免构建嵌套的可迭代对象。因为records是一个列表,所以没有必要将其 Package 在元组中。您试图绑定的参数(records,)是列表对象的一个元组(其中该列表可能携带4个值)。
因此,只需直接在params参数中传递列表即可。在ibm_db.execute中,您希望避免的是标量,而不是可迭代对象:

def insert_records(records):
    Db2_Insert = "INSERT INTO SALES_DATA VALUES(?, ?, ?, ?);"
    prepare = ibm_db.prepare(conn, Db2_Insert)
    ibm_db.execute(prepare, records)

相关问题