MySQL新增資料錄

      在〈MySQL新增資料錄〉中尚無留言

在資料表中新增資料錄的 SQL 基本語法如下

insert into 資料表 (欄1, 欄2, ...) values (值1, 值2....)

傳統新增資料錄

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()

發佈留言

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