資料庫種類
常用資料庫有Oracle, MSSQL, MySQL。
Oracle 是甲骨文的產品,並不流行於一般中小企業,只有少數大企業才會使用。
MSSQL 是微軟的產品,正式版是要付費的,而Express版本雖然是免費,但單檔案最大容量不起超過10G,並不適合用於商業用途。
MySQL也是Oracle的產品,免費使用,且沒有容量限制,是最適合商業用的軟体。當然,開始本篇之前,請先把MySQL Server安裝好,請參照 MySQL8.0安裝及環境 的說明
MySQL套件
Python支援Mysql的套件,常見的有如下三種
mysqlclient : 官方版本(Oracle),是由C/C++寫成,效能高
mysql-connecotr-python :官方版本(Oracle),純 Python版本,執行ORM時的效能甚至高過mysqlclient
pymysql : 日本人寫的,純Python版本,效能奇差無比。
所以,請先安裝套件 : pip install mysql-connector-python
若是使用Pycharm,請由 File/Setting/Project:xxx/Project interpreter, 再選 “+”, 然後安裝 mysql-connector-python
連線
使用 mysql.connect(連線資料)產生conn物件,再由conn 產生 cursor 命令物件,最後由cursor.execute(SQL語法) 執行SQL指令。
import mysql.connector as mysql conn=mysql.connect(host="ip",user="帳號", password="密碼", database="資料庫") cursor=conn.cursor() cursor.execute("select count(*) from 資料表") values=cursor.fetchall() cursor.close() for x in values: print(x);
傳統新增資料
SQL語法寫好後, 使用cursor.execute()執行, 最後記得要加 conn.commit()
conn=mysql.connect(host="遠端",user="帳號",password="密碼", database="資料庫")
cursor = conn.cursor()
cursor.execute("select * from 台灣股市 order by 日期")
rs=cursor.fetchall()
cursor.close()
conn.close()
conn=mysql.connect(host="localhost",user="帳號",password="密碼", database="資料庫")
cursor=conn.cursor()
for r in rs:
cmd = f"insert into 台灣股市 (日期, 開盤, 最高, 最低, 收盤) values ('{str(r[1]}', {r[2]}, {r[3]}, {r[4]}, {r[5]})";
cursor.execute(cmd)
conn.commit()
cursor.close()
conn.close()
快速新增資料方法一
將 values 值使用 “(v1, v2, v3, …..), (v5, v6, v7, …..), …… ,” 合成一串,最後記得將最後的 “,”刪除
cmd="insert into 台灣股市 (日期, 開盤, 最高, 最低, 收盤) values "
for r in rs:
cmd += f"({r[0]}, {r[1]}, {r[2]}, {r[3]}, {r[4]}), "
cmd=cmd[:-1] #去除最後的 ","
cursor.execute(cmd)
conn.commit()
cursor.close()
conn.close()
快速新增資料方法二
底下的 cmd 字串,只能使用 %s ,且不用單引號 ”
data=[] cmd = insert into 台灣股市 (日期, 開盤, 最高, 最低, 收盤) values (%s, %s, %s, %s, %s)" for r in rs: t=[str(r[1]), r[2], r[3], r[4], r[5]] data.append(t) cursor.executemany(cmd, data) conn.commit() cursor.close() conn.close()
取得欄位名稱
由cursor.description可以取得各個欄位的資料,再由欄位資料的第一個元素即為欄位名稱
cursor.execute("select * from 台灣股市") for d in cursor.description: print(d[0]) 結果 : id 日期 開盤 最高 最低 收盤
MSSQL
不太建議使用MSSQL,此篇只是記錄一下已備不時之需。
首先安裝MSSQL驅動程式 : pip install pyodbc
若是使用Pycharm,請由 File/Setting/Project:xxx/Project interpreter, 再選 “+”, 然後安裝 pyodbc
import pyodbc smDriver= '{ODBC Driver 17 for SQL Server}' msHost = 'ip' msDatabase = '資料庫' msAccount = '帳號' msPassword = '密碼' connStr='Driver={0};SERVER={1};PORT=1433;DATABASE={2};UID={3};PWD={4}'.format( msDriver, msHost, msDatabase, msAccount, msPassword) conn=pyodbc.connect(connStr) cursor = conn.cursor() cmd="insert into 資料表 (項次, 工項, 單位, 專案, 單價, 日期) values ('{0}', '{1}', '{2}', {3}, {4}, '{5}')".format( df.iloc[i,0], df.iloc[i, 1], df.iloc[i, 2], 4, df.iloc[i, 4], '2020/01/01') cursor.execute(cmd) conn.commit() conn.close()