Skip to main content
 首页 » 编程设计

Python Dataframe 到 Hana 表

2024年01月13日22三少

我的数据框位于Python环境中,我想将其从Python环境推送到Hana。 我正在尝试逐行推送到 Hana,但这种情况没有发生。但是,如果有一种方法可以一次性将完整数据帧推送到 Hana,那是最好的。

但是,目前我无法逐行动态推送数据帧的值:

这是我尝试过的Python代码,到目前为止是最好的,但不幸的是不起作用:(:

 cursor = conn.cursor()  
 
 cursor.execute('CREATE TABLE DS.BM_TEXT("Var_ID" VARCHAR (255),"Start_Date"  
 varchar(255),"End_Date" varchar(255),"ID" varchar(255),"Text" varchar(255))')  
 
 conn = dbapi.connect(address="hana1345.lab1.abc.com", port=30015, user='SHEEMAZ',  
 password='Hello1') 
 
 sql_insert_query = """ INSERT INTO DS.BM_TEXT VALUES (%s,%s,%s,%s,%s)""" 
 
 insert_tuple_2 = ("2", "Emma", "2019-05-19", "9500","22") 
 cursor.execute(sql_insert_query, insert_tuple_2) 

我得到的错误是:

编程错误:(257,'sql语法错误:“%”附近的语法不正确:第1行第53行(位于第53位)')

感谢所有帮助。

请您参考如下方法:

我不确定您的数据库 API 使用的是什么模块。但通常 ? 是占位符。如果没有在字符串上显式调用.format,它实际上可能不会将sql_insert_query插入到字符串中。我可能是错的,但我猜这就是问题所在。

至于一次性发送所有内容;可以使用executemany()来完成。您需要一个像这样的可迭代结构:

insert_list = [("2", "Emma", "2019-05-19", "9500","22"),("3", "Smith", "2019-05-19", "9500","22")] 

要将其发送到数据库,请使用以下查询:

cursor.executemany("""INSERT INTO DS.BM_TEXT VALUES (?,?,?,?,?);""", insert_list) 

这会将整个可迭代对象放入表中。我相信它仍然是逐行执行的,但是会为您完成繁重的工作。如果您的数据帧不是这样构造的,您可以创建一个可迭代的类/函数,从您的 df 生成该格式的数据。