Как я могу добавить датафрейм от панд к оракулу? - PullRequest
0 голосов
/ 24 апреля 2019

Я хочу добавить dataframe (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 owner, но я связан с prg. Так что он не мог найти стол и создал другой. Есть ли способ написать владельца или схему в эту функцию?

Ответы [ 2 ]

1 голос
/ 24 апреля 2019

Я думаю, что это может помочь:

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()

при условии, что привилегия вставки уже предоставлена ​​схеме 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
1 голос
/ 24 апреля 2019
 dataset.to_sql('dev_log',engine ,if_exists = 'append', index=False)

dev_log использовать непосредственно в качестве имени таблицы и engine напрямую для соединения, а не name = 'dev_log' и con = engine *

параметр: append: Insert new values to the existing table

поэтому я думаю, что он будет работать для добавления новой строки в существующую таблицу и не будет удалять ни одну строку из существующей таблицы

pandas.DataFrame.to_sql

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...