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

Python?ORM框架之SQLAlchemy?的基礎用法

 更新時間:2022年03月07日 08:53:39   作者:花_城  
這篇文章主要介紹了Python?ORM框架之SQLAlchemy?的基礎用法,ORM全稱?Object?Relational?Mapping對象關系映射,更多詳細內容需要的小伙伴課題參考下面文章介紹。希望對你的學習有所幫助

一、SQLAlchemy 介紹

1.1 ORM 的概念

ORM全稱Object Relational Mapping(對象關系映射),通過 ORM 就能使用 python 中的對象操作數據庫(在底層轉換為sql語句),免去sql語句的書寫。

但是,由于抽象程度較高,所以 sql 語句的執(zhí)行效率比較低,因此有些情況下,還是需要我們親自書寫sql語句。

ORM 是通過以下對應關系,將 python 代碼轉換為 sql 語句的:

python對象關系型數據庫
類屬性字段
類的實例對象記錄
實例對象的屬性值記錄的字段值

1.2 SQLAlchemy介紹

django 中訪問數據庫,通常會使用 django 自帶的 ORM(Object Relational Mapping)對象關系映射來訪問數據庫,只需要用python的語法來操作對象,就能被自動映射為 sql 語句。

而 SQLAlchemy 則是一個專門的對象關系映射器和 Python SQL工具包,旨在實現高效和高性能的數據庫訪問。

1.3 架構

  • Schema / Types: 類到表之間的映射規(guī)則。
  • SQL Expression Language :SQL 語句。
  • Engine :引擎。
  • Connection Pooling: 連接池。
  • Dialect: 方言,調用不同的數據庫 API(Oracle, postgresql, Mysql) 并執(zhí)行對應的 SQL語句。

1.4 異步

SQLAlchemy 在1.4版本之前,通過 greenlet 實現對異步的支持,而在1.4及之后版本中,添加了 python asyncio 標準庫的支持。所以,這需要 python 解釋器版本在 3.6+。

1.5 安裝

安裝 SQLAlchemy(1.4版本):

pip install SQLAlchemy

如果需要 greenlet 異步支持:

pip install sqlalchemy[asyncio]

二、SQLAlchemy 快速入門

2.1 創(chuàng)建配置(可選)

這一步不是必要的,但將配置單獨放置一個文件中,能方便我們管理和修改。

創(chuàng)建一個配置文件,如 settings.py:

DBMS = 'mysql' ?# 數據庫管理系統名稱:如 sqlite、mysql、oracle等?
DBAPI = 'pymysql' ?# 所使用的 DBAPI(第三方驅動程序),如 pysqlite、pymysql 等

# 下面就是數據庫管理系統的內容:主機IP、端口、用戶名、密碼、數據庫
HOST = 'localhost' ?
PORT = 3306 ?
USERNAME = 'root'
PASSWORD = '123456'
DB = 'myclass'

DB_URI = f'{DBMS}+{DBAPI}://{USERNAME}:{PASSWORD}@{HOST}:{PORT}/{DB}'

2.2 創(chuàng)建引擎和獲取、關閉連接

任何 SQLAlchemy 應用程序的開始都是一個名為 Engine 的對象,它是一個為特定的數據庫服務器創(chuàng)建一次的全局對象,可以理解為通過 SQLAlchemy 操作數據庫的連接中心,保存著連接池。

from sqlalchemy import create_engine
from settings import DB_URI


engine = create_engine(DB_URI) ?# 創(chuàng)建引擎
# 也可以直接傳入字符串,不使用配置文件
# engine = create_engine("數據庫管理系統名稱+驅動://用戶名:密碼@主機IP:端口號/數據庫名稱", echo=True, future=True)

conn = engine.connect() ?# 獲取連接
result = conn.execute('SQL語句') ?# 執(zhí)行SQL
print(result.fetchone()) ?# 打印 SQL 執(zhí)行結果中的一行
conn.close() ?# 關閉連接

create_engine()的其他常用參數:

  • echo:設置為 True,表示將 SQL 記錄到記錄器,該記錄器將 SQL 寫入標準輸出。
  • future:使用2.0風格的引擎和連接 API,以便使用 2.0 版本中的新特性。
  • encoding:默認為 utf-8。
  • pool_size:在連接池中保持打開的連接數。

2.3 創(chuàng)建 ORM 模型

from sqlalchemy.orm import declarative_base
from sqlalchemy import Column, Integer, String

# 創(chuàng)建基類
Base = declarative_base()


# 每一個模型類都要繼承 declarative_base() 創(chuàng)建的基類
class User(Base):
? ? # 定義表名
? ? __tablename__ = 'users'
? ??
? ? # 定義字段,參數為字段類型和約束
? ? id = Column(Integer, primary_key=True, autoincrement=True)
? ? name = Column(String)
? ? age = Column(Integer)
? ? sex = Column(String(10))

2.4 創(chuàng)建會話

每次在 python 中執(zhí)行完操作后,都需要通過 session 提交到數據庫:

from sqlalchemy.orm import sessionmaker

# 創(chuàng)建會話,相當于 Django ORM 的 objects
Session = sessionmaker(bind=engine)
session = Session()

# 執(zhí)行數據的增刪改查……
# 比如,新增數據
# session.add(模型類(類屬性=值,……))

# 提交
session.commit()
# 關閉session
session.close()

在commit()之前,可以取消對實例對象所做的修改,也就是回滾:

session.rollback()

2.5 創(chuàng)建和刪除表

創(chuàng)建所有表:

Base.metadata.create_all(engin) ?

刪除所有表:

Base.metadata.drop_all(engin)

2.6 新增數據

新增數據:

變量名 = 模型類(類屬性=值,……)
session.add(變量名)

批量新增:

session.add_all([
    模型類(類屬性=值,……),
    模型類(類屬性=值,……)
    ……
])

2.7 查詢數據

查詢所有:

變量名 = session.query(模型類).all()

返回模型類實例對象列表。

查詢指定字段:

變量名 = session.query(模型類.字段).all()

只獲取返回結果的第一個:

變量名 = session.query(模型類).first()

連表查詢:

變量名 = session.query(模型類1,模型類2).filter(條件).all()

# 如,查詢用戶 ID 及其愛好的 ID
res = session.query(User, Hobby).filter(User.hobby_id == Hobby.id).all()

返回一個元組構成的列表,元組包含兩個實例對象。

過濾:

變量名 = session.query(模型類).filter(條件).all()

# 如,查詢年齡大于18歲的學生名字
res = session.query(Student.name).filter(Student.age >= 18).all()

條件中常用運算符:

多條件過濾:

# 條件之間默認為 and 關系
變量名 = session.query(模型類).filter(條件1, 條件2……).all()


# 使用 or?
from sqlalchemy import or_
變量名 = session.query(模型類).filter(or_(條件1, 條件2……)).all()

排序:

變量名 = session.query(模型類).order_by(排序依據字段.desc()).all()     # desc 表示倒序,寫 asc 或不寫就是升序

統計個數:

變量名 = session.query(模型類).count()

切片:

變量名 = session.query(模型類).all()[1:3]

2.8 修改數據

變量名 = session.query(模型類).filter(條件).update({"字段":值})
# 不要忘記提交

2.9 刪除數據

session.query(模型類).filter(條件).delete()

三、多表操作

下面的內容中,我將稱定義了外鍵字段的模型類為被關聯模型,另一個為關聯模型。

3.1 一對多

創(chuàng)建模型:

外鍵定義在多的一方。

from sqlalchemy import ForeignKey
from sqlalchemy.orm import relationship

class 模型類名稱(Base):
? ? __tablename__ = '表名'
? ??
? ? 字段 = Column(類型,約束)
? ? ……
? ? 外鍵字段 = Column(類型,其他約束,ForeignKey(關聯模型.字段)) ?# 重點
? ? 關聯模型名稱小寫 = relationship("關聯模型的名稱",backref="用于反向查詢的名稱") ? ?# 不是字段,不會在數據庫中創(chuàng)建

新增數據:

# 正向新增
變量名 = 被關聯模型(字段=值,……,外鍵字段=關聯模型(字段=值……))
session.add(變量名)

# 反向新增
變量名A = 關聯模型(字段=值,……)
變量名A.backref的值 = [被關聯模型的實例1,被關聯模型的實例2……]
session.add(變量名A)

正向查詢:

先獲取被關聯模型的實例,然后通過實例.外鍵獲取關聯對象。

反向查詢:

先獲取關聯模型的實例,然后通過實例.backref的值獲取被關聯模型的實例對象。

3.2 多對多

創(chuàng)建模型:

新建中間表,只保存雙方的對應關系即可。

在其中一方,定義 relationship:

關聯模型類名稱小寫 = relationship("關聯模型類的名稱", secondary='中間表模型類的名稱小寫', backref="用于反向查詢的名稱")    # 不是字段,不會在數據庫中創(chuàng)建

新增數據:

在雙方創(chuàng)建好數據后,直接在中間表中添加對應關系。

正向、反向查詢:

與一對多模型一致。

到此這篇關于Python ORM框架之SQLAlchemy 的基礎用法的文章就介紹到這了,更多相關SQLAlchemy 的用法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python基本文件操作實用指南

    Python基本文件操作實用指南

    文件操作是我們開發(fā)中必不可少的一項需求,下面這篇文章主要給大家介紹了關于Python基本文件操作的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • 5道關于python基礎 while循環(huán)練習題

    5道關于python基礎 while循環(huán)練習題

    這篇文章主要給大家分享的是5道關于python基礎 while循環(huán)練習題,無論學習什么語言,練習都是必不可少的,下面文章的練習題挺精湛的,需要的朋友可以參考一下
    2021-11-11
  • python簡單實現基于SSL的IRC bot實例

    python簡單實現基于SSL的IRC bot實例

    這篇文章主要介紹了python簡單實現基于SSL的IRC bot,實例分析了IRC機器人的相關實現技巧,需要的朋友可以參考下
    2015-06-06
  • 使用Python監(jiān)控文件內容變化代碼實例

    使用Python監(jiān)控文件內容變化代碼實例

    在python中文件監(jiān)控主要有兩個庫,一個是pyinotify,一個是watchdog。pyinotify依賴于Linux平臺的inotify,今天我們就來探討下pyinotify.
    2018-06-06
  • Python中的startswith和endswith函數使用實例

    Python中的startswith和endswith函數使用實例

    這篇文章主要介紹了Python中的startswith和endswith函數使用實例,特別是endswith函數,有了它,判斷文件的擴展名、文件的類型在容易不過了,需要的朋友可以參考下
    2014-08-08
  • python微信公眾號之關鍵詞自動回復

    python微信公眾號之關鍵詞自動回復

    這篇文章主要為大家詳細介紹了python微信公眾號之關鍵詞自動回復,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Python利用Beautiful Soup模塊修改內容方法示例

    Python利用Beautiful Soup模塊修改內容方法示例

    Beautiful Soup是一個可以從HTML或XML文件中提取數據的Python 庫。它能夠通過你喜歡的轉換器實現慣用的文檔導航、查找、修改文檔的方式。他還能夠修改HTML/XML文檔的內容。這篇文章主要介紹了Python利用Beautiful Soup模塊修改內容的方法,需要的朋友可以參考下。
    2017-03-03
  • Python讀取pdf文件的簡單代碼示例

    Python讀取pdf文件的簡單代碼示例

    PDF文件的數據主要是文本、圖片、表格,這三部分組成,但是也會穿插流程圖、各種柱狀圖等,這篇文章主要給大家介紹了關于Python讀取pdf文件的簡單代碼示例,需要的朋友可以參考下
    2024-02-02
  • python同時遍歷數組的索引和值的實例

    python同時遍歷數組的索引和值的實例

    今天小編就為大家分享一篇python同時遍歷數組的索引和值的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • 使用Qt?QSS繪制簡單美化界面功能

    使用Qt?QSS繪制簡單美化界面功能

    這篇文章主要介紹了使用Qt?QSS繪制簡單美化界面,本文以繪制登錄界面為例,創(chuàng)建一個繼承自Qwidget的設計師界面類,為了使得控件排放整齊有序,可以使用layout布局進行輔助,感興趣的朋友跟隨小編一起看看吧
    2022-10-10

最新評論

兴隆县| 盐亭县| 滨州市| 蒙山县| 晴隆县| 武威市| 府谷县| 积石山| 积石山| 得荣县| 隆安县| 阳原县| 井冈山市| 文化| 梅州市| 留坝县| 乐业县| 白水县| 石林| 黔南| 贵州省| 苍南县| 南投市| 元朗区| 阳高县| 乌兰浩特市| 奈曼旗| 乐山市| 吉木乃县| 沧州市| 博客| 金湖县| 灵川县| 萍乡市| 宣威市| 德化县| 丽水市| 中西区| 上蔡县| 扬州市| 义乌市|