Python的數據庫ORM框架:SQLAlchemy
SQLAlchemy是Python編程語言下的一款開源軟件。提供了SQL工具包及對象關系映射(ORM)工具,使用MIT許可證發行。
SQLAlchemy“采用簡單的Python語言,為高效和高性能的數據庫訪問設計,實現了完整的企業級持久模型”。SQLAlchemy的理念是,SQL數據庫的量級和性能重要于對象集合;而對象集合的抽象又重要于表和行。因此,SQLAlchmey采用了類似于Java里Hibernate的數據映射模型,而不是其他ORM框架采用的Active Record模型。不過,Elixir和declarative等可選插件可以讓用戶使用聲明語法。
下面是一個完整ORM的例子:
from sqlalchemy.orm import mapper, sessionmaker #sessionmaker() 函數是最常使用的創建最頂層可用于整個應用 Session 的方法,Session 管理著所有與數據庫之間的會話 from datetime import datetime from sqlalchemy import Table, MetaData, Column, ForeignKey, Integer, String, Unicode, DateTime #會SQL的人能理解這些函數吧? engine = create_engine("sqlite:///tutorial.db", echo=True) #創建到數據庫的連接,echo=True 表示用logging輸出調試結果 metadata = MetaData() #跟蹤表屬性 user_table = Table( #創建一個表所需的信息:字段,表名等 'tf_user', metadata, Column('id', Integer, primary_key=True), Column('user_name', Unicode(16), unique=True, nullable=False), Column('email_address', Unicode(255), unique=True, nullable=False), Column('password', Unicode(40), nullable=False), Column('first_name', Unicode(255), default=''), Column('last_name', Unicode(255), default=''), Column('created', DateTime, default=datetime.now)) metadata.create_all(engine) #在數據庫中生成表 class User(object): pass #創建一個映射類 mapper(User, user_table) #把表映射到類 Session = sessionmaker() #創建了一個自定義了的 Session類 Session.configure(bind=engine) #將創建的數據庫連接關聯到這個session session = Session() u = User() u.user_name='dongwm' u.email_address='dongwm@dongwm.com' u.password='testpass' #給映射類添加以下必要的屬性,因為上面創建表指定這幾個字段不能為空 session.add(u) #在session中添加內容 session.flush() #保存數據 session.commit() #數據庫事務的提交,sisson自動過期而不需要關閉 query = session.query(User) #query() 簡單的理解就是select() 的支持 ORM 的替代方法,可以接受任意組合的 class/column 表達式 print list(query) #列出所有user print query.get(1) #根據主鍵顯示 print query.filter_by(user_name='dongwm').first() #類似于SQL的where,打印其中的第一個 u = query.filter_by(user_name='dongwm').first() u.password = 'newpass' #修改其密碼字段 session.commit() #提交事務 print query.get(1).password #打印會出現新密碼 for instance in session.query(User).order_by(User.id): #根據id字段排序,打印其中的用戶名和郵箱地址 print instance.user_name, instance.email_address
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!