<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Flask的ORM工具SQLAlchemy

      Flask的ORM工具SQLAlchemy

      一、ORM 是什么?

      ORM(Object-Relational Mapping,對象關系映射)是一種編程技術,用于在面向對象的編程語言與關系型數據庫之間建立映射關系。它允許開發者使用面向對象的語法(如類、對象、方法)操作數據庫,而無需直接編寫 SQL 語句。

       

      ORM 的核心作用:

      •  抽象數據庫操作:將數據庫表映射為編程語言中的“類”,表中的行映射為“對象”,表的字段映射為“對象屬性”。
      •  屏蔽數據庫差異:同一套 ORM 代碼可適配多種數據庫(如 MySQL、PostgreSQL、SQLite 等),無需修改核心邏輯。
      •  簡化開發流程:避免手動編寫復雜 SQL,減少出錯概率,同時讓代碼更易讀、易維護。

       

      二、Flask 的 ORM 工具:SQLAlchemy 詳解

      SQLAlchemy 是 Python 生態中最流行的 ORM 框架之一,并非專為 Flask 設計,但通過 Flask-SQLAlchemy擴展可與 Flask 無縫集成,成為 Flask 項目中操作數據庫的首選工具。

      1、SQLAlchemy 的定位

      SQLAlchemy 不僅是 ORM,更是一個“SQL 工具包”,它包含兩部分核心功能:

      • Core(核心):提供 SQL 表達式語言,可直接通過 Python 代碼生成 SQL 語句(類似“高級 SQL 生成器”)。
      • ORM:在 Core 基礎上封裝的對象關系映射層,支持通過類和對象操作數據庫。

       

      2、Flask-SQLAlchemy 擴展

      Flask-SQLAlchemy 是 Flask 官方推薦的擴展,它簡化了 SQLAlchemy 與 Flask 的集成,自動處理配置、會話管理等細節。

       (1)安裝

      pip install flask-sqlalchemy

       

       (2)基本配置與初始化

      在 Flask 項目中,需先配置數據庫連接信息并初始化 SQLAlchemy:

      from flask import Flask
      from flask_sqlalchemy import SQLAlchemy
      
      app = Flask(__name__)
      
      # 配置數據庫 URI(以 SQLite 為例,文件型數據庫,無需額外服務)
      app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///mydatabase.db'
      # 關閉 SQLAlchemy 的修改跟蹤功能(優化性能)
      app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
      
      # 初始化 SQLAlchemy 實例,關聯 Flask 應用
      db = SQLAlchemy(app)

       

      數據庫 URI 格式(不同數據庫):

      •    SQLite:sqlite:///數據庫文件名.db(相對路徑,文件存于項目根目錄)
      •    MySQL:mysql+pymysql://用戶名:密碼@主機:端口/數據庫名
      •    PostgreSQL:postgresql://用戶名:密碼@主機:端口/數據庫名

       

      3、核心概念與使用

       (1)模型(Model):映射數據庫表

      模型是 ORM 的核心,對應數據庫中的一張表。通過繼承 db.Model 定義模型類,類的屬性對應表的字段。

      示例:定義一個 User 模型(對應 user 表):

      class User(db.Model):
          #表名(不指定則默認用類名小寫,如 User → user)
          __tablename__ = 'users'
          
          #字段定義:id(主鍵,自增整數)
          id = db.Column(db.Integer, primary_key=True)
          #用戶名(字符串,非空,唯一)
          username = db.Column(db.String(80), unique=True, nullable=False)
          #郵箱(字符串,非空,唯一)
          email = db.Column(db.String(120), unique=True, nullable=False)
          
          #定義對象的字符串表示(便于調試)
          def __repr__(self):
              return f'<User {self.username}>'

      - db.Column:定義表的字段,第一個參數為數據類型(如 db.Integer、db.String)。

      - 常用參數:

      •    primary_key=True:設為主鍵。
      •    unique=True:字段值唯一(如用戶名不可重復)。
      •    nullable=False:字段不可為空(必填)。
      •    default:設置默認值(如 default=datetime.utcnow)。

       

       (2)創建數據庫和表

      定義模型后,需通過代碼創建實際的數據庫文件和表:

      #在 Flask 應用上下文內執行(如在視圖函數中,或通過 shell)
      
      with app.app_context():
      
          #創建所有模型對應的表(若表已存在則不重復創建)
      
          db.create_all()

      執行后,項目根目錄會生成 mydatabase.db(SQLite),包含 users 表。

       

       (3)會話(Session):操作數據庫的“接口”

      SQLAlchemy 通過“會話(Session)”執行數據庫操作(增刪改查),Flask-SQLAlchemy 中通過 db.session 調用。

      會話的作用:暫存所有操作,最終通過 commit() 提交到數據庫,類似“事務”。

       

       (4)基本操作示例

       ① 新增數據(插入)

      with app.app_context():
          #創建用戶對象(對應表中的一行)
          user1 = User(username='alice', email='alice@example.com')
          user2 = User(username='bob', email='bob@example.com')
          
          #將對象添加到會話
          db.session.add(user1)
          db.session.add(user2)   #可批量添加:db.session.add_all([user1, user2])
          
          #提交會話(實際寫入數據庫)
          db.session.commit()

       

       ② 查詢數據

      Flask-SQLAlchemy 提供了豐富的查詢方法,通過 模型類.query 調用:

      with app.app_context():
          #1. 查詢所有用戶(返回列表)
          all_users = User.query.all()
          print(all_users)  # [<User alice>, <User bob>]
          
          #2. 查詢第一個用戶
          first_user = User.query.first()
          print(first_user.username)   #'alice'
          
          #3. 通過主鍵查詢(高效)
          user_by_id = User.query.get(1)   #查詢 id=1 的用戶
          print(user_by_id.email)   # 'alice@example.com'
          
          #4. 條件查詢(filter_by,簡化版,只支持關鍵字參數)
          user_bob = User.query.filter_by(username='bob').first()
          
          #5. 復雜條件查詢(filter,支持表達式)
          #例如:查詢郵箱包含 'example' 的用戶
          users_with_example = User.query.filter(User.email.like('%example%')).all()
          
          #6. 排序(按 username 升序)
          sorted_users = User.query.order_by(User.username).all()
          
          #7. 限制查詢數量(前 10 條)
          limited_users = User.query.limit(10).all()

       

       ③ 更新數據

      with app.app_context():
      
          #1. 先查詢到要更新的對象
      
          user = User.query.filter_by(username='alice').first()
      
      
          #2. 修改屬性
      
          user.email = 'new_alice@example.com'
        
      
          #3. 提交會話(保存修改)
      
          db.session.commit()

       

       ④ 刪除數據

      with app.app_context():
      
          #1. 先查詢到要刪除的對象
          user = User.query.filter_by(username='bob').first()
      
          #2. 從會話中刪除
          db.session.delete(user)
      
          #3. 提交會話(執行刪除)
          db.session.commit()

       

       (5)關系(Relationship):處理表之間的關聯

      實際數據庫中表常有關聯(如“用戶-文章”一對多),SQLAlchemy 通過 db.relationship 定義模型間的關系。

       

      示例:用戶(User)和文章(Post)的一對多關系:

      class Post(db.Model):
          __tablename__ = 'posts'
          
          id = db.Column(db.Integer, primary_key=True)
          title = db.Column(db.String(100), nullable=False)
          content = db.Column(db.Text, nullable=False)
          #外鍵:關聯 users 表的 id 字段
          user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
          
          #定義與 User 的反向關系(一個用戶對應多篇文章)
          #backref:在 User 中自動添加 posts 屬性,可通過 user.posts 獲取該用戶的所有文章
          author = db.relationship('User', backref=db.backref('posts', lazy=True))

      使用示例:

      with app.app_context():
          #查詢用戶的所有文章
          user = User.query.get(1)
          user_posts = user.posts   #所有該用戶的文章列表
          
          #查詢文章的作者
          post = Post.query.get(1)
          post_author = post.author   #文章對應的用戶對象

       

      4、數據庫遷移:Flask-Migrate

      當模型結構變更(如新增字段、修改類型)時,直接刪除表重建會丟失數據。Flask-Migrate 擴展基于 Alembic(SQLAlchemy 作者開發的遷移工具),可安全地同步模型變更到數據庫。

       (1)安裝

      pip install flask-migrate

       

       (2)初始化

      from flask_migrate import Migrate
      
      #關聯 app 和 db
      migrate = Migrate(app, db)

       (3)常用遷移命令

      # 初始化遷移環境(僅首次執行)
      flask db init
      
      #生成遷移腳本(檢測模型與數據庫的差異)
      flask db migrate -m "描述遷移內容,如:新增用戶年齡字段"
      
      #執行遷移(將腳本應用到數據庫)
      flask db upgrade

       

      三、SQLAlchemy 的優勢

      1. 靈活性:支持 ORM 模式(面向對象)和 Core 模式(直接生成 SQL),可根據需求選擇。
      2. 跨數據庫兼容:一套代碼適配多種數據庫,切換數據庫只需修改 URI。
      3. 強大的查詢能力:提供豐富的查詢 API,支持復雜條件、聯表查詢、聚合函數等。
      4. 事務支持:通過會話的 commit() 和 rollback()(回滾)保證數據一致性。
      5. 與 Flask 無縫集成:Flask-SQLAlchemy 簡化了配置和會話管理,開箱即用。

      四、總結

      ORM 是連接面向對象編程與關系型數據庫的橋梁,而 SQLAlchemy 是 Python 中功能最完善的 ORM 工具之一。通過 Flask-SQLAlchemy 擴展,開發者可以在 Flask 項目中用簡潔的面向對象語法操作數據庫,大幅提升開發效率,同時保證代碼的可維護性和擴展性。

      posted @ 2025-09-26 10:02  hqq的進階日記  閱讀(20)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 深夜福利啪啪片| 蜜桃无码一区二区三区| 色老99久久精品偷偷鲁| 久久精品国产亚洲AⅤ无码| av天堂久久精品影音先锋| 精品久久一线二线三线区| 鲁丝片一区二区三区免费| 国产精品中文第一字幕| 久久天天躁狠狠躁夜夜躁2o2o| 亚洲精品国产老熟女久久| gogogo在线播放中国| 南昌县| 亚洲欧洲精品日韩av| 韩国无码av片在线观看| 国产精品久久久久鬼色| 五月婷之久久综合丝袜美腿| 精品超清无码视频在线观看| 亚洲熟妇丰满多毛xxxx| 亚洲熟女一区二区av| 久久综合久久美利坚合众国| 狠狠噜天天噜日日噜| 囊谦县| 国产精品毛片在线看不卡| 一级国产在线观看高清| 污污网站18禁在线永久免费观看| 亚洲精品国产一二三区| 国产精品亚洲精品日韩已满十八小 | 任我爽精品视频在线播放| 少妇爽到爆视频网站免费| 亚洲成人av在线资源| 四虎网址| 国产老熟女一区二区三区| 亚洲性线免费观看视频成熟| 色偷偷www.8888在线观看| 国产精品综合一区二区三区 | 国产精品一区二区av片| 国产午夜亚洲精品福利| 亚洲日本va午夜中文字幕久久| 色综合色国产热无码一| 男女做爰真人视频直播| 国产成人综合久久亚洲精品|