iT邦幫忙

1

Python & SQLALchemy 學習筆記_新增、修改以及刪除資料

前一篇文章有提到該如何利用 SQLALchemy 建立一張資料表,
這篇文章主要是紀錄該如何利用 SQLALchemy 進行資料的操作,
查詢的部分則是會放到下一篇文章

一、新增資料

可以透過在同一個 module 下直接進行資料的操作,
也可以將另外撰寫一個 module 並將表結構以及操作實體 import
來進行操作,下面的範例都會是採用後者的寫法並將檔案命名為 test.py

(一)、引入表結構以及 create_session

from main import create_session
from main import Test

session = create_session()

(二)、插入單筆資料

利用 session.add() 即可插入單筆資料

import datetime
from main import create_session
from main import Test

session = create_session()

datas = {
    "name": "nick",
    "time": datetime.datetime.now()
 }

session.add(Test(**datas))
session.commit()
session.close()

註: sqlite 的 DATETIME 只接受 DATETIME object 的型態,因此不需要 strftime()
註: ** 代表將資料打包成 key, value 的形式,詳細參考資料
https://ithelp.ithome.com.tw/upload/images/20211117/20144024CG9myAwGdw.png
https://ithelp.ithome.com.tw/upload/images/20211117/201440249t2BBeF8Sp.png

如果加入了不在表結構當中的元素,系統則會跳出錯誤

from main import create_session
from main import Test

session = create_session()

datas = {
    "name": "nick",
    "time": datetime.datetime.now(),
    "location": "Taiwan"
 }

try:
    session.add(Test(**datas))
    session.commit()
except Exception as e:
    print(e.__class__.__name__)
    print(str(e))
finally:
    session.close()

https://ithelp.ithome.com.tw/upload/images/20211117/201440240gwRO5bfY4.png

(三)、插入多筆資料

將資料以串列的型態包起來並利用 session.add_all()

from main import create_session
from main import Test

session = create_session()

datas = [
    Test(name="nick", time=datetime.datetime.now()),
    Test(name="honey", time=datetime.datetime.now())
]

try:
    session.add_all(datas)
    session.commit()
except Exception as e:
    print(e.__class__.__name__)
    print(str(e))
finally:
    session.close()

https://ithelp.ithome.com.tw/upload/images/20211117/20144024AMaEGGoPJu.png
https://ithelp.ithome.com.tw/upload/images/20211117/20144024G5S4uphePw.png

二、修改資料

from main import create_session
from main import Test

session = create_session()

datas = {"name": "andy"}

try:
    session.query(Test).filter_by(id=1).update(datas)
    session.commit()
except Exception as e:
    print(e.__class__.__name__)
    print(str(e))
finally:
    session.close()

語法拆解:

  • session.query(Test): 表示針對 Test 這個資料結構中的資料表進行查詢
  • .filter_by(id=1): 表示利用 ORM 進行資料篩選,選到指定資料
  • .update(datas)

https://ithelp.ithome.com.tw/upload/images/20211117/20144024BOjVpjZntm.png

三、刪除資料

原理同 update(),只是 delete() 並不需要傳入參數

from main import create_session
from main import Test

session = create_session()

try:
    session.query(Test).filter_by(id=1).delete()
    session.commit()
except Exception as e:
    print(e.__class__.__name__)
    print(str(e))
finally:
    session.close()

https://ithelp.ithome.com.tw/upload/images/20211117/20144024317gSdIhTR.png


尚未有邦友留言

立即登入留言