在資料表中新增資料錄的 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()