Şev*_*man 4 python sql oracle dataframe pandas
我想在 oracle 中将数据帧(熊猫)附加到我的表中。但是这段代码删除了表中的所有行:(
我的数据框和我的结果变成了这样:
0, 0, 0, ML_TEST, 0, 5
0, 0, 0, ML_TEST, 0, 6
Run Code Online (Sandbox Code Playgroud)
通过下面的代码块:
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)
Run Code Online (Sandbox Code Playgroud)
如何在不删除此表中现有行的情况下将此数据框的行附加到表的最后一个?
现在我再次尝试,现在附加到最后,但在第一次尝试时它删除了所有现有的行。如何有效地做到这一点而不引起任何问题?
实际上,由于该表的架构而出现问题。该表在 gnl 所有者中,但我与 prg 连接。所以它找不到表并创建了另一个表。有没有办法将所有者或架构写入此函数?
我认为这可能会有所帮助:
import cx_Oracle
import pandas as pd
from pandas import DataFrame, read_csv
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()
Run Code Online (Sandbox Code Playgroud)
提供的插入权限已授予prg您表的架构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
Run Code Online (Sandbox Code Playgroud)