SQLAlchemy

知識(shí)點(diǎn):

  1. 什么是sqlalchemy
  2. 環(huán)境搭建
  3. 使用sqlalchemy
  4. sqlalchemy對(duì)象映射
  5. 常用的過濾方法
  6. sqlalchemy常用的數(shù)據(jù)類型

什么是sqlalchemy

ORM 全稱 Object Relational Mapping對(duì)象關(guān)系映射。
SQLAlchemy 是一個(gè)數(shù)據(jù)庫的ORM框架,python操作數(shù)據(jù)庫的工具ORM 將數(shù)據(jù)庫中的表與面向?qū)ο笳Z言中的類建立了一種對(duì)應(yīng)關(guān)系。

部署環(huán)境

第一、mysql 數(shù)據(jù)庫。
第二、pymysql 用于連接 MySQL 服務(wù)器的一個(gè)庫
通過e裝 : pip install pymysql
第三、sqlalchemy 數(shù)據(jù)庫的ORM框架
通過pip安裝 : pip install sqlalchemy

注意:
pip安裝是在python的環(huán)境變量配置好的前提下打開windows上的命令提示符進(jìn)行安裝。
安裝完成后打開python IDLE,通過import sqlalchemy測(cè)試是否安裝成功。

使用sqlaclchemy

從sqlalchemy中導(dǎo)入create_engin,創(chuàng)建引擎建立與數(shù)據(jù)庫的連接。
from sqlalchemy import create_engine

準(zhǔn)備連接數(shù)據(jù)庫的數(shù)據(jù):
HOSTNAME = '127.0.0.1' # ip地址
PORT = '3306' # 端口號(hào)
DATABASE = 'sqlceshi' # 數(shù)據(jù)庫名
USERNAME = 'zhiliaoawen' # 用戶名
PASSWORD = 'zhiliaoawen' # 用戶登錄密碼
DB_URI的格式:
數(shù)據(jù)庫類型+數(shù)據(jù)庫驅(qū)動(dòng)名稱://用戶名:密碼@機(jī)器地址:端口號(hào)/數(shù)據(jù)庫名?字符編碼
DB_URI=mysql+pymysql://<username>:<password>@<host>/<dbname>charset=utf8
engine = create_engine(DB_URI)

  • 聲明映射
    對(duì)象關(guān)系型映射,數(shù)據(jù)庫中的表與python中的類相對(duì)應(yīng),創(chuàng)建的類必須繼承自sqlalchemy中的基類。
    使用Declarative方法定義的映射類依據(jù)一個(gè)基類,
    這個(gè)基類是維系類和數(shù)據(jù)表關(guān)系的目錄
    應(yīng)用通常只需要有一個(gè)base的實(shí)例。我們通過declarative_base()功能創(chuàng)建一個(gè)基類
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base(engine)
  • 創(chuàng)建數(shù)據(jù)表對(duì)應(yīng)的類
    這些表的類都繼承于我們的Base基類
    定義好一些屬性,與user表中的字段進(jìn)行映射并且這個(gè)屬性要屬于某個(gè)類型
    Column用來創(chuàng)建表中的字段的一個(gè)方法
    sqlalchemy常用的數(shù)據(jù)類型
    Integer:整形,映射到數(shù)據(jù)庫中的int類型。
    String:字符類型,映射到數(shù)據(jù)庫中的varchar類型,使用時(shí),需要提供一個(gè)字符長(zhǎng)度。
    from sqlalchemy import Column,Integer,String

  • 數(shù)據(jù)操作
    增、刪、改、查
    創(chuàng)建會(huì)話
    需要定義個(gè)session會(huì)話對(duì)象
    sessionmaker初始化一個(gè)類對(duì)象
    from sqlalchemy.orm import sessionmaker
    Session = sessionmaker(engine)
    session = Session()

    創(chuàng)建一個(gè)對(duì)象
    將數(shù)據(jù)保存到數(shù)據(jù)庫中:
    將創(chuàng)建的user對(duì)象添加到會(huì)話對(duì)象中
    添加單個(gè)對(duì)象:
    session.add(user)
    添加多個(gè)對(duì)象:
    session.add_all([user1,user2,....])
    將會(huì)話對(duì)象進(jìn)行提交:
    session.commit()
    如果你不想將修改提交則使用回滾:session.rollback()

    通過session的query這個(gè)對(duì)象完成的
    查找User這張表中的所有數(shù)據(jù)
    session.query(User).all()
    查找User這張表中的第一條數(shù)據(jù)
    session.query(User).first()
    通過username=taka來進(jìn)行過濾查找
    session.query(User).filter_by(username='taka')
    通過get方法,用主鍵查找對(duì)象
    session.query(User).get(primary_key)
    補(bǔ)充:
    filter 引用列名時(shí),使用“類名.屬性名”的方式,比較使用兩個(gè)等號(hào)“==”
    filter_by 引用列名時(shí),使用“屬性名”,比較使用一個(gè)等號(hào)“=” 賦值這種形式

    先從數(shù)據(jù)庫中找到數(shù)據(jù)
    修改成需要的數(shù)據(jù)
    做事物的提交操作:
    user = session.query(User).filter_by(id=3)[0]
    user.username = 'awen'
    session.commit()

    先從數(shù)據(jù)庫中獲取數(shù)據(jù)
    使用session.delete方法進(jìn)行刪除
    做事務(wù)的提交操作:
    user = session.query(User).filter_by(username='taka').first()
    user.delete(user)
    session.commit()

常用過濾方法

filter和filter_by的區(qū)別:
filter 引用列名時(shí),使用“類名.屬性名”的方式,比較使用兩個(gè)等號(hào)“==”
filter_by 引用列名時(shí),使用“屬性名”,比較使用一個(gè)等號(hào)“=”

等于:
session.query(User).filter(User.username == 'taka').all()

不等于:
session.query(User).filter(User.username != 'taka').all()

模糊匹配like:
session.query(User).filter(User.username.like('taka%')).all()

成員所屬(in_):
session.query(User).filter(User.username.in_(['tk','塔卡','taka'])).all()

不屬于notin:
session.query(User).filter(~User.username.in_(['tk','塔卡','taka'])).all()
session.query(User).filter(User.username.notin_(['tk','塔卡','taka'])).all()

為空is null:
session.query(User).filter(User.username==None).all()
# 或者是
session.query(User).filter(User.username.is_(None)).all()

不為空is not null:
session.query(User).filter(User.username != None).all()
# 或者是
session.query(User).filter(User.username.isnot(None)).all()

多個(gè)條件and:
session.query(User).filter(User.username=='taka',User.password=='123456').all()
session.query(User).filter_by(username='tk',password='1234').all()

條件或or:
from sqlalchemy import or_ 
session.query(User).filter(or_(User.username=='tk',User.password=='123456')).all()

sqlalchemy常用數(shù)據(jù)類型

  1. Integer:整型,映射到數(shù)據(jù)庫中的int類型。
  2. String:字符類型,映射到數(shù)據(jù)庫中的varchar類型,使用時(shí),需要提供一個(gè)字符長(zhǎng)度。
  3. Text:文本類型,映射到數(shù)據(jù)庫中的text類型。
  4. Boolean:布爾類型,映射到數(shù)據(jù)庫中的tinyint類型,在使用的時(shí)候,傳遞True/False進(jìn)去。
  5. Date:日期類型,沒有時(shí)間。映射到數(shù)據(jù)庫中是date類型,
    在使用的時(shí)候,傳遞datetime.date()進(jìn)去。
  6. DateTime:日期時(shí)間類型。映射到數(shù)據(jù)庫中的是datetime類型,
    在使用的時(shí)候,傳遞datetime.datetime()進(jìn)去。
  7. Float:浮點(diǎn)類型。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容