gpt4 book ai didi

python - 如何将数据框从 Pandas 附加到 oracle 表?

转载 作者:行者123 更新时间:2023-12-03 23:36:12 25 4
gpt4 key购买 nike

我想将数据框( Pandas )附加到我在 oracle 中的表中。
但是这段代码删除了表中的所有行:(

我的数据框和结果变成了这样:

 0, 0, 0, ML_TEST, 0, 5 
0, 0, 0, ML_TEST, 0, 6

通过下面的代码块:
import cx_Oracle
import pandas as pd

from sqlalchemy import types, create_engine
dataset = pd.read_csv("denemedf.txt", delimiter=",")
print(dataset)
from sqlalchemy import create_engine
engine = create_engine('oracle://***:***@***:***/***', echo=False)
dataset.to_sql(name='dev_log',con=engine ,if_exists = 'append', index=False)

如何在不删除此表中现有行的情况下将此数据框的行附加到表的最后一行?

现在我再次尝试,现在追加到最后,但在第一次尝试时它删除了所有现有行。
如何有效地做到这一点而不会造成任何问题?

实际上,由于该表的架构而出现问题。
该表在 gnl 所有者中,但我与 prg 连接。所以它找不到表并创建了另一个。
这是将所有者或模式写入此函数的任何方式吗?

最佳答案

我认为这可能会有所帮助:

import cx_Oracle
import pandas as pd

dataset = pd.read_csv("C:\\pathToFile\\denemedf.txt", delimiter=",")
con = cx_Oracle.connect('uname/pwd@serverName:port/instanceName')
cursor = con.cursor()

sql='INSERT INTO gnl.tbl_deneme VALUES(:1,:2,:3,:4,:5,:6)'
df_list = dataset.values.tolist()
n = 0
for i in dataset.iterrows():
cursor.execute(sql,df_list[n])
n += 1

con.commit()
cursor.close
con.close
提供的插入权限已授予模式 prg为您的餐 table tbl_deneme(连接到 gnl 后 -> grant insert on tbl_deneme to prg )
假定您的文本文件( denemedf.txt)在哪里
col1,col2,col3,col4,col5,col6
0, 0, 0, ML_TEST, 0, 5
0, 0, 0, ML_TEST, 0, 6
此外,一个动态选项,如果不存在,它将通过使用第一行的列名创建一个表,并根据从第二行派生的值列表的拆分元素插入值,而无需一个一个显式指定变量列表,以及使用 cursor.executemany 的性能更高的选项可能会提供例如
import cx_Oracle
import pandas as pd

con = cx_Oracle.connect(user, password, host+':'+port+'/'+dbname)
cur = con.cursor()
tab_name = 'gnl.tbl_deneme'
cursor.execute('SELECT COUNT(*) FROM user_tables WHERE table_name = UPPER(:1) ',[tab_name])
exs = cursor.fetchone()[0]
df = pd.read_csv('C:\\pathToFile\\denemedf.txt', sep = ',', dtype=str)
col=df.columns.tolist()
crt=""
for k in col:
crt += ''.join(k)+' VARCHAR2(4000),'

if int(exs) == 0:
crt = 'CREATE TABLE '+tab_name+' ('+crt.rstrip(",")+')'
cursor.execute(crt)

vrs=""
for i in range(0,len(col)):
vrs+= ':'+str(i+1)+','

cols=[]
sql = 'INSERT INTO '+tab_name+' VALUES('+vrs.rstrip(",")+')'
for i in range(0,len(df)):
cols.append(tuple(df.fillna('').values[i]))

cursor.executemany(sql,cols)
con.commit()
cursor.close
con.close

关于python - 如何将数据框从 Pandas 附加到 oracle 表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55825697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com