最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python ORM編程基礎(chǔ)示例

 更新時間:2020年02月02日 11:53:45   作者:Dawn__Z  
這篇文章主要介紹了Python ORM編程基礎(chǔ),結(jié)合實(shí)例形式分析了Python ORM編程相關(guān)概念、原理以及緩存、數(shù)據(jù)庫操作相關(guān)使用技巧,需要的朋友可以參考下

本文實(shí)例講述了Python ORM編程。分享給大家供大家參考,具體如下:

ORM編程

ORM(object-relational mapping)對象關(guān)系映射 作用:在關(guān)系型數(shù)據(jù)庫和業(yè)務(wù)實(shí)體對象之間做一個映射,方便在開發(fā)中,不需要再使用復(fù)雜的sql語句,只需要簡單操作對象的屬性與方法。 所有ORM具備3方面基本能力:映射技術(shù)、CRUD操作、緩存優(yōu)化。每種編程語言都具有自己的ORM庫,java 的Hibernate、IBATIS;C#的Grove LINQ; Python 的 SQLAlchemy

1、映射技術(shù)

面向?qū)ο笫菑能浖こ痰幕驹瓌t(如耦合、聚合、封裝)的基礎(chǔ)由來 關(guān)系型數(shù)據(jù)庫是從數(shù)學(xué)理論上的基礎(chǔ)發(fā)展而來。

ORM庫需解決三個問題:

  • 數(shù)據(jù)類型映射:將數(shù)據(jù)庫的類型映射為編程語言自身的類型;
  • 類映射:將數(shù)據(jù)表定義映射為編程語言自身的類;
  • 關(guān)系映射:將數(shù)據(jù)庫中基于外鍵的關(guān)系連接轉(zhuǎn)換為編程語言中基于對象引用的關(guān)系連接。

2、CRUD操作

  • C–Create(增加)
  • R–Retrieve(讀取,重新得到數(shù)據(jù))
  • U–Update(更新)
  • D–Delete(刪除)

在SQL中:insert,select, update,delete四種語句實(shí)現(xiàn)CRUD

ORM自動實(shí)現(xiàn)以下操作:

  1. 將這些調(diào)用轉(zhuǎn)換為SQL語句;
  2. 通過數(shù)據(jù)庫引擎發(fā)送個給數(shù)據(jù)庫執(zhí)行;
  3. 將數(shù)據(jù)庫返回的結(jié)果記錄用ORM映射技術(shù)轉(zhuǎn)換為類對象。

3、緩存優(yōu)化

  • 將從數(shù)據(jù)庫中查詢到的數(shù)據(jù)以類對象形式保存在本地內(nèi)存中,以便之后再用時隨時抽取。
  • 在真正需要讀取查詢結(jié)果時才執(zhí)行數(shù)據(jù)庫的select操作,而不是在ORM查詢命令執(zhí)行時查詢數(shù)據(jù)庫。

4、用peewee進(jìn)行ORM數(shù)據(jù)庫編程

思路:

  • 導(dǎo)入需要的包:peewee,建立一個數(shù)據(jù)庫引擎對象db
  • 定義一個ORM基類:BaseModel(),建立SQLite連接
  • 類型映射:定義一些數(shù)據(jù)類型
  • 表映射:定義兩個對象類:course, teacher
  • 關(guān)系映射:使用ForeignKeyField 設(shè)置與course的連接關(guān)系,其中的參數(shù):to_field用于指定被連接的字段名,related_name參數(shù)對該關(guān)系賦予了一個名字
import os
if os.path.exists('sampleDB.db'):
  os.remove('sampleDB.db')
# 引入peewee包的所有內(nèi)容
from peewee import *
# 建立一個Sqlite數(shù)據(jù)庫引擎對象,該引擎打開數(shù)據(jù)庫文件sampleDB.db
db = SqliteDatabase("sampleDB.db")
# 定義一個ORM的基類,在基類中指定本ORM所使用的數(shù)據(jù)庫,
# 這樣在之后所有的子類中就不用重復(fù)聲明數(shù)據(jù)庫
class BaseModel(Model):
  class Meta:
    database = db
# 定義course表,繼承自BaseModel
class Course(BaseModel):
  id = PrimaryKeyField() # 定義主鍵
  title = CharField(null=False) # 定義字符串
  period = IntegerField() # 整型
  description = CharField()
  class Meta:
    order_by = ('title',)
    db_table = 'course'  # 定義數(shù)據(jù)庫中的表名
# 定義 teacher 表,繼承自BaseModel
class Teacher(BaseModel):
  id = PrimaryKeyField()
  name = CharField(null=False)
  gender = BooleanField() # 布爾型
  address = CharField()
  # ForeignKeyField 設(shè)置與course的連接關(guān)系,其中的參數(shù):to_field用于指定被連接的字段名,related_name參數(shù)對該關(guān)系賦予了一個名字
  course_id = ForeignKeyField(Course, to_field="id", related_name="course")
  class Meta:
    order_by = ('name',)
    db_table = "teacher"
# 建表,僅需創(chuàng)建一次
Course.create_table()
Teacher.create_table()
# 新增行
Course.create(id=1, title='經(jīng)濟(jì)學(xué)', period=320, description='文理科學(xué)生均可選修')
Course.create(id=2, title='大學(xué)英語', period=300, description='大一學(xué)生必修課')
Course.create(id=3, title='哲學(xué)', period=100, description='必修課')
Course.create(id=134, title='編譯原理', period=100, description='計(jì)算機(jī)系選修')
Teacher.create(name='白陣君', gender=True, address='..', course_id=1)
Teacher.create(name='李森', gender=True, address='..', course_id=3)
Teacher.create(name='張雯雯', gender=False, address='..', course_id=2)
# 查詢一行
record = Course.get(Course.title == '大學(xué)英語')
print("課程:%s, 學(xué)時:%d, 課程類型: %s" % (record.title, record.period, record.description))
# 更新
record.period = 200
record.save()
# 刪除
record.delete_instance()
# 查詢所有記錄
courses = Course.select()
for i in courses:
  print(i.id, i.title, i.period, i.description)
# 帶條件查詢,并將結(jié)果按period字段倒序排序
courses = Course.select().where(Course.id< 10).order_by(Course.period.desc())
for i in courses:
  print(i.id, i.title, i.period, i.description)
# 統(tǒng)計(jì)所有課程的平均學(xué)時
total = Course.select(fn.Avg (Course.period).alias('avg_period'))
for i in total:
  print(u"平均學(xué)時:", i.avg_period)
# 更新多個記錄
Course.update(period=300).where(Course.id > 100).execute()
# 多表連接操作,Peewee會自動根據(jù)ForeignKeyField的外鍵定義進(jìn)行連接:
Record = Course.select().join(Teacher).where(Teacher.gender == True)
for i in Record:
  print(i.id, i.title, i.period, i.description)

參考來源:書籍《python 高效開發(fā)實(shí)戰(zhàn)

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python常見數(shù)據(jù)庫操作技巧匯總》、《Python數(shù)學(xué)運(yùn)算技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 使用beaker讓Facebook的Bottle框架支持session功能

    使用beaker讓Facebook的Bottle框架支持session功能

    這篇文章主要介紹了使用beaker讓Facebook的Bottle框架支持session功能,session在Python的Django等框架中內(nèi)置但在Bottle中并沒有被集成,需要的朋友可以參考下
    2015-04-04
  • odoo字段訪問控制的操作方法

    odoo字段訪問控制的操作方法

    在 Odoo 中,可以通過幾種方式實(shí)現(xiàn)字段的訪問控制?0c;包括通過模型安全規(guī)則、記錄規(guī)則和字段屬性來限制字段的訪問,這篇文章主要介紹了odoo字段訪問控制的相關(guān)操作,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • Django自定義分頁與bootstrap分頁結(jié)合

    Django自定義分頁與bootstrap分頁結(jié)合

    這篇文章主要為大家詳細(xì)介紹了Django自定義分頁與bootstrap分頁結(jié)合使用的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • python刪除字符串中指定字符的方法

    python刪除字符串中指定字符的方法

    這篇文章主要介紹了python刪除字符串中指定字符的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • Python腳本獲取操作系統(tǒng)版本信息

    Python腳本獲取操作系統(tǒng)版本信息

    本文給大家分享的小技巧是如何利用Python腳本獲取Windows和Linux的系統(tǒng)版本信息,非常的簡單實(shí)用,有需要的小伙伴可以查看下
    2016-12-12
  • python列表切片和嵌套列表取值操作詳解

    python列表切片和嵌套列表取值操作詳解

    今天小編就為大家分享一篇python列表切片和嵌套列表取值操作詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Python實(shí)現(xiàn)輸出某區(qū)間范圍內(nèi)全部素數(shù)的方法

    Python實(shí)現(xiàn)輸出某區(qū)間范圍內(nèi)全部素數(shù)的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)輸出某區(qū)間范圍內(nèi)全部素數(shù)的方法,涉及Python數(shù)值運(yùn)算、排序、判斷等相關(guān)操作技巧,需要的朋友可以參考下
    2018-05-05
  • python中dict使用方法詳解

    python中dict使用方法詳解

    這篇文章主要介紹了python中dict使用方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • Jupyter Notebook 遠(yuǎn)程訪問配置詳解

    Jupyter Notebook 遠(yuǎn)程訪問配置詳解

    這篇文章主要介紹了Jupyter Notebook 遠(yuǎn)程訪問配置詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Python制作Windows按鍵通知腳本

    Python制作Windows按鍵通知腳本

    對于鍵盤沒有背光燈的同學(xué)而言,切換大小寫或控制Num鍵開關(guān)的時候沒有提示,經(jīng)常需要試探性地輸入一些字符來判斷開關(guān)是否打開,體驗(yàn)非常糟糕。所以本文就來用Python做一個Windows按鍵通知腳本,需要的可以參考一下
    2022-11-11

最新評論

遂溪县| 滨州市| 响水县| 镇坪县| 柳林县| 秦安县| 定边县| 章丘市| 汾阳市| 碌曲县| 万年县| 青冈县| 新源县| 六枝特区| 江孜县| 汝阳县| 海安县| 陵水| 社旗县| 军事| 吉水县| 乐东| 定南县| 玛曲县| 杭锦后旗| 咸阳市| 六安市| 弥勒县| 吐鲁番市| 泗阳县| 沅江市| 宝鸡市| 文化| 库伦旗| 闽侯县| 个旧市| 台湾省| 梅河口市| 茶陵县| 布尔津县| 北流市|