iT邦幫忙

0

[Python]pandas.to_sql 報錯 AttributeError: 'Connection' object has no attribute 'connect'

  • 分享至 

  • xImage

各位版上大神 大家好,
小弟我想將地端的一些EXCEL資料寫進我架設好的MySQL裡面,
遵循官方文件及網路上的資源嘗試利用python將這些資料用迴圈的方式直接寫進DB,
可是當執行的時候會出現以下錯誤訊息,
因此想跪求版上各位大神幫我看看我是不是有哪裡寫錯了呢????

AttributeError: 'Connection' object has no attribute 'connect'

Code

import pandas as pd, warnings, pymysql, os
from sqlalchemy import *
warnings.simplefilter("ignore")

user, pwd = "root", "root"
host, port, db = "127.0.0.1", 3306, "myDB"

dbConnection = create_engine("mysql+pymysql://{}:{}@{}/{}?charset=utf8".format(user, pwd, host, db), pool_recycle = port).connect()

path = "..\DATAFRAME"
folder = os.listdir(path)
for i in folder:
    df = pd.read_excel("{}/{}".format(path, i))
    df.to_sql(i.replace(".xlsx", ""), con = dbConnection, if_exists = "replace", index = False)   
看更多先前的討論...收起先前的討論...
froce iT邦大師 1 級 ‧ 2023-02-01 15:50:29 檢舉
不知道你是dbConnection = create_engine()這句出錯還是 df.to_sql()這句引發的錯誤,不過pandas的con看文件可以吃engine物件,或許先把dbConnection = create_engine().connect()的connect拿掉?
alien663 iT邦研究生 5 級 ‧ 2023-02-01 16:34:35 檢舉
我看根本不用加上 .connect()
https://ithelp.ithome.com.tw/articles/10220446
kennex_x iT邦新手 4 級 ‧ 2023-02-01 16:37:31 檢舉
謝謝大大指點!!!
確實我把".connect()"拿掉就可以了!!
我在網路上看到有人放".connect()"也可以完成寫入,
不知道其中的詳細的原因是甚麼呢?
僅能怪自己學藝不精QAQ

另外放上我看到的文章,希望有大大可以幫我解釋一下差別呢?

https://stackoverflow.com/questions/16476413/how-to-insert-pandas-dataframe-via-mysqldb-into-database
froce iT邦大師 1 級 ‧ 2023-02-02 11:05:24 檢舉
你給的例子:
1. 很舊了,他pandas應該是0.14以前的,他還特地提出來說0.14以後可能會改
2. 他的con接受的是 pymysql.Connection,這個已經不符合目前文件了,目前con吃的是sqlite3.Connection/qlalchemy.engine.(Engine/Connection),但python的 DB driver都會依循PEP 249 – Python Database API Specification v2.0,所以說不定拿pymysql.Connection去餵也會過
3. 可能得像下面一樣,分兩句寫才會過,詳細原因我不清楚。應該跟qlalchemy.engine的初始化程序有關。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
JamesDoge
iT邦高手 1 級 ‧ 2023-02-02 05:26:29
import pandas as pd, warnings, pymysql, os
from sqlalchemy import create_engine
warnings.simplefilter("ignore")

user, pwd = "root", "root"
host, port, db = "127.0.0.1", 3306, "myDB"

engine = create_engine("mysql+pymysql://{}:{}@{}/{}?charset=utf8".format(user, pwd, host, db), pool_recycle = port)
dbConnection = engine.connect()

path = "..\DATAFRAME"
folder = os.listdir(path)
for i in folder:
    df = pd.read_excel("{}/{}".format(path, i))
    df.to_sql(i.replace(".xlsx", ""), con = dbConnection, if_exists = "replace", index = False)

我要發表回答

立即登入回答