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


<<:  [C# Winform] MDI 多重视窗操作-如何避免重复开启

>>:  Certified Oracle 1Z0-1057-21 Exam Dumps is What You Really Need to Pass Your Exam

CSS微动画 - 弹出来的选单 Part.1

Q: 这个看起来像猫爪的东西是什麽? A: 喵? 本篇开始将实作选单的微动画,比较特别的要来说说t...

Day 11:「动起来!动起来!」- 用 Tailwind 简单做出过渡和动画效果

还记得我们在之前做过变化模式吗? 没错,就是滑鼠悬停之後会变色的那个。 我们今天呢,就是要来帮它们...

[Day28] CH13:画出你的藏宝图——事件处理(上)

今天我们要实作一个华氏摄氏的温度转换器,首先先来设计他的介面 import javax.swing....

Day23 - this&Object Prototypes Ch3 Objects - Review

Object content Array 是一种 Object,所以我们也能够用 key valu...

RxJS Multicast 类 Operator (1) - multicast / publish / refCount / share / shareReplay

还记得之前我们介绍过 Cold Observable v.s. Hot Observable 吗? ...