#----------------------------------------------------- #範例14-1:使用sqlalchemy的ORM技術連線資料庫,新增一個資料表:經管3A #------------------------------------------------- #(1)參考: # https://www.796t.com/content/1544363402.html # https://ithelp.ithome.com.tw/questions/10204032 # https://sunnyingit.github.io/book/section_python/SQLalchemy-orm.html # 影片:https://www.youtube.com/watch?v=6k6NxFyKKQo # to_sql:https://www.jianshu.com/p/d615699ff254 #(2)什麼是SQLAlchemy # SQL Alchemy = SQL煉金術 # SQLAlchemy 的一個目標是提供能相容眾多資料庫(如 SQLite、MySQL、Postgres、Oracle、MS-SQL、SQLServer 和 Firebird)的企業級持久性模型。 # SQLAlchemy 提供了SQL工具包及物件關係映射(ORM)工具 # SQLAlchemy ORM呈現了一種關於使用者定義的Python類別和資料庫表格(table), 以及類別(物件)的實例(instance)與之相對應表格中的資料列的方法 # ORM:物件關係對映器(Object Relation Mapping) # ORM 即為使用者自訂類和資料庫的表的映射關係,通俗來說,一個類映射到一張表,一個類的實例(物件)對應資料庫表裡面的一行資料,實例的屬性和資料庫row的資料保持即時同步 #(1)步驟1:建議:mySQL範例要在anaconda裡面測試(不要再cola測試) #要先安裝:python 3.x版本的安裝mysql的指令:pip install pymysql #(2)步驟2:安裝mySQL #安裝: wamp或xamp #帳號為root,密碼不設定 #(3)步驟3:建立dataframe(df) #(4)步驟4:使用連線mydb資料庫的指令: #先安裝sqlalchemy模組 #指令: pip install sqlalchemy #from sqlalchemy import create_engine #engine = create_engine("mysql+pymysql://{}:{}@{}/{}?charset={}".format('使用者名稱', '登入密碼', '127.0.0.1:3306', '資料庫名','utf8')) #建立連線 #conn = engine.connect() #df.to_sql(name='資料表名稱', con=conn, if_exists='replace', index=False) #或是 #df.to_sql(name='資料表名稱', con=conn, if_exists='append', index=False) #☎ if_exists='replace', 若存在則覆蓋 # if_exists='append', 若存在則在後面加上去 # if_exists='fail',若存在則不做處理 #☎連線mySQL的資料表,若要設定索引欄位,方法: #df.to_sql(name="經管3a", con=conn, if_exists="replace", index=True, index_label='abc') #注意:新的索引欄位index_label,不可以是已經存在的欄位名稱,必須是新名稱 #☎連線mySQL的資料表,若不要設定索引欄位,方法: #df.to_sql(name="經管3a", con=conn, if_exists="replace", index=False) #(5)步驟5:查看mySQL資料庫,是否有新增資料表,或已經修改 #------------------------------ #練習1:讀取csv檔案,轉成dataframe #------------------------------ #(1)https://acupun.site/lecture/pandas/example/chp10/pratice/scoreChi.csv #讀取csv檔案 #轉成df print() print("1-1.顯示全部資料=\n") #------------------------------ #練習2:用sqlalchemy的ORM技術連線資料庫,新增一個資料表:經管3A #from sqlalchemy import create_engine #engine = create_engine("mysql+pymysql://{}:{}@{}/{}?charset={}".format('root', '', '127.0.0.1:3306', 'mydb','utf8')) #engine = create_engine("mysql+pymysql://{}:{}@{}/{}?charset={}".format('root', '', 'localhost:3306', 'mydb','utf8')) #engine = create_engine("mysql+pymysql://root:@127.0.0.1:3306/mydb?charset=utf8") #engine = create_engine("mysql+pymysql://root:@localhost:3306/mydb?charset=utf8") #conn = engine.connect() #df.to_sql(name="經管3a", con=conn, if_exists="replace", index=False) #------------------------------ #(1)先安裝sqlalchemy模組: pip install sqlalchemy #(2)從sqlalchemy模組載入create_engine函式 #(3)建立連線引擎 #(4)把df同步連線到mySQLNone #關閉連線 #-------------------------------------------------------------------- #-------------------------------------------------------------------- #範例14-1:使用sqlalchemy的ORM技術連線資料庫,新增一個資料表:經管3A #------------------------------------------------- #(1)參考: # https://www.796t.com/content/1544363402.html # https://ithelp.ithome.com.tw/questions/10204032 # https://sunnyingit.github.io/book/section_python/SQLalchemy-orm.html # 影片:https://www.youtube.com/watch?v=6k6NxFyKKQo # to_sql:https://www.jianshu.com/p/d615699ff254 #(2)什麼是SQLAlchemy # SQL Alchemy = SQL煉金術 # SQLAlchemy 的一個目標是提供能相容眾多資料庫(如 SQLite、MySQL、Postgres、Oracle、MS-SQL、SQLServer 和 Firebird)的企業級持久性模型。 # SQLAlchemy 提供了SQL工具包及物件關係映射(ORM)工具 # SQLAlchemy ORM呈現了一種關於使用者定義的Python類別和資料庫表格(table), 以及類別(物件)的實例(instance)與之相對應表格中的資料列的方法 # ORM:物件關係對映器(Object Relation Mapping) # ORM 即為使用者自訂類和資料庫的表的映射關係,通俗來說,一個類映射到一張表,一個類的實例(物件)對應資料庫表裡面的一行資料,實例的屬性和資料庫row的資料保持即時同步 #(1)步驟1:建議:mySQL範例要在anaconda裡面測試(不要再cola測試) #要先安裝:python 3.x版本的安裝mysql的指令:pip install pymysql #(2)步驟2:安裝mySQL #安裝: wamp或xamp #帳號為root,密碼不設定 #(3)步驟3:建立dataframe(df) #(4)步驟4:使用連線mydb資料庫的指令: #先安裝sqlalchemy模組 #指令: pip install sqlalchemy #from sqlalchemy import create_engine #engine = create_engine("mysql+pymysql://{}:{}@{}/{}?charset={}".format('使用者名稱', '登入密碼', '127.0.0.1:3306', '資料庫名','utf8')) #建立連線 #conn = engine.connect() #df.to_sql(name='資料表名稱', con=conn, if_exists='replace', index=False) #或是 #df.to_sql(name='資料表名稱', con=conn, if_exists='append', index=False) #☎ if_exists='replace', 若存在則覆蓋 # if_exists='append', 若存在則在後面加上去 # if_exists='fail',若存在則不做處理 #☎連線mySQL的資料表,若要設定索引欄位,方法: #df.to_sql(name="經管3a", con=conn, if_exists="replace", index=True, index_label='abc') #注意:新的索引欄位index_label,不可以是已經存在的欄位名稱,必須是新名稱 #☎連線mySQL的資料表,若不要設定索引欄位,方法: #df.to_sql(name="經管3a", con=conn, if_exists="replace", index=False) #(5)步驟5:查看mySQL資料庫,是否有新增資料表,或已經修改 #------------------------------ #練習1:讀取csv檔案,轉成dataframe #------------------------------ #(1)https://acupun.site/lecture/pandas/example/chp10/pratice/scoreChi.csv #讀取csv檔案 import pandas as pd #轉成df df = pd.read_csv("https://acupun.site/lecture/pandas/example/chp10/pratice/scoreChi.csv") print() print("1-1.顯示全部資料=\n", df) #------------------------------ #練習2:用sqlalchemy的ORM技術連線資料庫,新增一個資料表:經管3A #from sqlalchemy import create_engine #engine = create_engine("mysql+pymysql://{}:{}@{}/{}?charset={}".format('root', '', '127.0.0.1:3306', 'mydb','utf8')) #engine = create_engine("mysql+pymysql://{}:{}@{}/{}?charset={}".format('root', '', 'localhost:3306', 'mydb','utf8')) #engine = create_engine("mysql+pymysql://root:@127.0.0.1:3306/mydb?charset=utf8") #engine = create_engine("mysql+pymysql://root:@localhost:3306/mydb?charset=utf8") #conn = engine.connect() #df.to_sql(name="經管3a", con=conn, if_exists="replace", index=False) #------------------------------ #(1)先安裝sqlalchemy模組: pip install sqlalchemy #(2)從sqlalchemy模組載入create_engine函式 from sqlalchemy import create_engine #(3)建立連線引擎 engine = create_engine("mysql+pymysql://{}:{}@{}/{}?charset={}".format('root', '', '127.0.0.1:3306', 'mydb','utf8')) #engine = create_engine("mysql+pymysql://{}:{}@{}/{}?charset={}".format('root', '', 'localhost:3306', 'mydb','utf8')) #engine = create_engine("mysql+pymysql://root:@localhost3306/mydb?charset=utf8") conn = engine.connect() #(4)把df同步連線到mySQLNone df.to_sql(name='經管2A', con=conn, if_exists='append', index=False) #若覆蓋 #df.to_sql(name='經管2A', con=conn, if_exists='replace', index=False) #關閉連線 conn.close() #--------------------------------------------------------------------