MySQL資料庫

      在〈MySQL資料庫〉中尚無留言

資料庫種類

常用資料庫有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()

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *