SQL Chemy, to_sql을 사용하여 팬더와 MySQL 데이터베이스에 쓰기
팬더 데이터 프레임을 MySQL 테이블에 쓰려고 합니다.to_sql
·기존에 사용flavor='mysql'
단, 향후 감가상각될 예정이므로 SQL Chemy 엔진을 사용하는 것으로의 전환을 희망하고 있습니다.
샘플 코드:
import pandas as pd
import mysql.connector
from sqlalchemy import create_engine
engine = create_engine('mysql+mysqlconnector://[user]:[pass]@[host]:[port]/[schema]', echo=False)
cnx = engine.raw_connection()
data = pd.read_sql('SELECT * FROM sample_table', cnx)
data.to_sql(name='sample_table2', con=cnx, if_exists = 'append', index=False)
판독은 정상적으로 동작하지만to_sql
에러가 발생했습니다.
데이터베이스 오류:sql 'SELECT name FROM sqlite_master WHERE type='table' AND name=에서 실행하지 못했습니다.;': 문자열 형식 지정 중 인수 수가 잘못되었습니다.
sqlite를 사용하려고 하는 것처럼 보이는 이유는 무엇입니까?mysql, 특히 mysql.connector와 sqlalchemy 연결을 올바르게 사용하는 방법은 무엇입니까?
또, 접속으로서 엔진을 건네려고 했는데, 커서 오브젝트가 없는 것을 나타내는 에러가 발생했습니다.
data.to_sql(name='sample_table2', con=engine, if_exists = 'append', index=False)
>>AttributeError: 'Engine' object has no attribute 'cursor'
대신 엔진 사용raw_connection()
동작:
import pandas as pd
import mysql.connector
from sqlalchemy import create_engine
engine = create_engine('mysql+mysqlconnector://[user]:[pass]@[host]:[port]/[schema]', echo=False)
data.to_sql(name='sample_table2', con=engine, if_exists = 'append', index=False)
내가 어제 이것을 시도했을 때 왜 그것이 나에게 이전의 오류를 주었는지 명확하지 않다.
또는 를 사용합니다.pymysql
패키지...
import pymysql
from sqlalchemy import create_engine
cnx = create_engine('mysql+pymysql://[user]:[pass]@[host]:[port]/[schema]', echo=False)
data = pd.read_sql('SELECT * FROM sample_table', cnx)
data.to_sql(name='sample_table2', con=cnx, if_exists = 'append', index=False)
pymysql 및 sqlalchemy를 사용하면 Panda v0.22에서 사용할 수 있습니다.
import pandas as pd
import pymysql
from sqlalchemy import create_engine
user = 'yourUserName'
passw = 'password'
host = 'hostName' # either localhost or ip e.g. '172.17.0.2' or hostname address
port = 3306
database = 'dataBaseName'
mydb = create_engine('mysql+pymysql://' + user + ':' + passw + '@' + host + ':' + str(port) + '/' + database , echo=False)
directory = r'directoryLocation' # path of csv file
csvFileName = 'something.csv'
df = pd.read_csv(os.path.join(directory, csvFileName ))
df.to_sql(name=csvFileName[:-4], con=mydb, if_exists = 'replace', index=False)
"""
if_exists: {'fail', 'replace', 'append'}, default 'fail'
fail: If table exists, do nothing.
replace: If table exists, drop it, recreate it, and insert data.
append: If table exists, insert data. Create if does not exist.
"""
질문 제목에 SQL Chemy라는 단어가 포함되어 있는 것은 알고 있습니다만, 질문과 답변에서 pymysql 또는 mysql.connector를 Import할 필요가 있음을 알 수 있습니다.또한 pymysql을 사용하여 작업을 수행할 수도 있으며 SQL Chemy를 호출할 수도 있습니다.
import pymysql
user = 'root'
passw = 'my-secret-pw-for-mysql-12ud' # In previous posts variable "pass"
host = '172.17.0.2'
port = 3306
database = 'sample_table' # In previous posts similar to "schema"
conn = pymysql.connect(host=host,
port=port,
user=user,
passwd=passw,
db=database)
data.to_sql(name=database, con=conn, if_exists = 'append', index=False, flavor = 'mysql')
이 솔루션은 SQL Chemy를 사용하지 않기 때문에 좋다고 생각합니다.
언급URL : https://stackoverflow.com/questions/30631325/writing-to-mysql-database-with-pandas-using-sqlalchemy-to-sql
'itsource' 카테고리의 다른 글
PHP의 GET URL 매개 변수 (0) | 2022.09.27 |
---|---|
Java Logging 프레임워크의 마커는 무엇이며 마커를 사용하는 이유는 무엇입니까? (0) | 2022.09.27 |
Larabel 5 응용 프로그램 키 (0) | 2022.09.27 |
"B" 인쇄가 "#" 인쇄보다 크게 느린 이유는 무엇입니까? (0) | 2022.09.27 |
도커 컨테이너 내의 mariadb grant 테이블:hostname 및 ip (0) | 2022.09.27 |