to_sql을 사용하여 팬더 데이터프레임을 오라클 데이터베이스에 쓰는 방법?
저는 새로운 오라클 학습자입니다.팬더 데이터 프레임을 오라클 테이블에 쓰려고 합니다.온라인으로 조사를 해보니 코드 자체가 매우 간단한데 왜 코드가 작동하지 않는지 모르겠습니다.
로컬 파일에서 판다 데이터 프레임을 읽어봤습니다.
import cx_Oracle
import pandas as pd
import os
dir_path = os.path.dirname(os.path.realpath("__file__"))
df = pd.read_csv(dir_path+"/sample.csv")
이제 df를 인쇄하면 데이터 프레임 df는 다음과 같습니다.
DATE YEAR MONTH SOURCE DESTINATION
0 11/1/2017 1:00 2017 1 AL CO
1 11/2/2017 1:00 2017 5 GA ID
2 11/3/2017 1:00 2017 12 GA MO
그런 다음 cx_Oracle을 사용하여 데이터베이스와 연결을 생성하면 작동합니다.다음으로 table TEST에 df 데이터 프레임을 작성하려고 합니다.이 테이블 TEST는 오라클 데이터베이스에 이미 존재하는 빈 테이블이며, 오라클의 DATE, YEAR, MONTH, SOURCE, Destination 등의 열이 있습니다.모든 데이터 유형이 df 샘플 데이터와 일치합니다.내 코드는 다음과 같습니다.
conn_str = u'account/password@host:1521/server'
conn = cx_Oracle.connect(conn_str)
# Write records stored in a DataFrame to a oracle database
df.to_sql('TEST', conn, if_exists='replace') # the error shows here
conn.close()
오류를 표시합니다.
데이터베이스 오류:sql 'SELECT name From sqlite_master WHere type='table' AND name=?;': ORA-01036: 잘못된 변수 이름/번호
그 문제를 어떻게 푸나요?시간 내주셔서 정말 감사합니다!
SO에서 비슷한 질문을 본 적이 있습니다. 이 질문은 다음에 의해 생성된 연결 개체를 사용하여 Oracle DB에 기록하려고 할 때 발생합니다.cx_Oracle
.
SQL Alchemy를 사용하여 연결을 만들어 봅니다.
import cx_Oracle
from sqlalchemy import types, create_engine
conn = create_engine('oracle+cx_oracle://scott:tiger@host:1521/?service_name=hr')
df.to_sql('TEST', conn, if_exists='replace')
다음 코드를 사용하여 Oracle 테이블을 로드할 수 있습니다.
import pandas as pd
import os
creds = {}
creds['tns_admin'] = 'Wallet_Path'
creds['sid'] = 'dev_low'
creds['user'] = 'username'
creds['password'] = pwd
os.environ['TNS_ADMIN'] = creds['tns_admin']
uri = 'oracle+cx_oracle://' + creds['user'] + ':' + creds['password'] + '@' + creds['sid']
df = pd.read_csv("test.csv")
df.to_sql('test', uri, schema='PRD', if_exists='replace')
연결 대신 URI를 구축하고 통과시켜야 합니다.
참고: 새로운 Oracle 데이터베이스(Autonomous)에는 Wallet이 필요하므로 TNS_ADMIN 환경 변수에 Wallet 경로를 설정해야 합니다.
또한 cx_Oracle을 수입할 필요가 없었고, 그것을 다시 확인했습니다.
내가 속지 않는다는 것을 확실히 하기 위해, 나는 테이블을 떨어뜨리고 약속을 했습니다.
그리고 위의 코드를 실행해보니 데이터로 새로운 테이블을 만들었습니다.
이 솔루션을 참고한 후 다음과 같은 단계를 거쳐 이 작업을 수행할 수 있었습니다.
from sqlalchemy.engine import create_engine
DIALECT = 'oracle'
SQL_DRIVER = 'cx_oracle'
USERNAME = 'your_username'
PASSWORD = 'your_password'
HOST = 'subdomain.domain.tld'
PORT = 1521
SERVICE = 'your_oracle_service_name'
ENGINE_PATH_WIN_AUTH = DIALECT + '+' + SQL_DRIVER + '://' + USERNAME + ':' + PASSWORD +'@' + HOST + ':' + str(PORT) + '/?service_name=' + SERVICE
engine = create_engine(ENGINE_PATH_WIN_AUTH)
SQLlchemy 엔진을 성공적으로 만든 후 팬더 기능으로 전달할 수 있습니다.
df.to_sql('name_of_sql_table',engine,schema='your_schema')
언급URL : https://stackoverflow.com/questions/47540837/how-to-write-pandas-dataframe-to-oracle-database-using-to-sql
'programing' 카테고리의 다른 글
Python and Django Operational Error (2006, 'MySQL 서버가 사라졌습니다') (0) | 2023.09.16 |
---|---|
어떻게 하면 HTML과 CSS로 div 콘텐츠를 한 줄로 유지할 수 있습니까? (0) | 2023.09.16 |
jquery로 클릭 이벤트를 변경하는 방법? (0) | 2023.09.16 |
Oracle DECODE의 표준 SQL 대안 (0) | 2023.09.16 |
XML 직렬화 및 상속된 유형 (0) | 2023.09.16 |