我的数据框位于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 生成该格式的数据。