国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

Python下SQLAlchemy的簡單介紹

來源:懂視網 責編:小采 時間:2020-11-27 14:20:42
文檔

Python下SQLAlchemy的簡單介紹

Python下SQLAlchemy的簡單介紹:本篇文章給大家帶來的內容是關于php協成實現的詳解(附代碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。SQLAlchemy是Python編程語言下的一款開源軟件。提供了SQL工具包及對象關系映射(ORM)工具,SQLAlchemy使用MIT許可證
推薦度:
導讀Python下SQLAlchemy的簡單介紹:本篇文章給大家帶來的內容是關于php協成實現的詳解(附代碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。SQLAlchemy是Python編程語言下的一款開源軟件。提供了SQL工具包及對象關系映射(ORM)工具,SQLAlchemy使用MIT許可證

本篇文章給大家帶來的內容是關于php協成實現的詳解(附代碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

SQLAlchemy是Python編程語言下的一款開源軟件。提供了SQL工具包及對象關系映射(ORM)工具,SQLAlchemy使用MIT許可證發行。它采用簡單的Python語音,為高效和高性能的數據庫訪問設計,實現了完整的企業級持久模型。SQLAlchemy非常關注數據庫的量級和性能。

本節通過一套例子分析SQLAlchemy的使用方法。

使用SQLAlchemy至少需要3部分代碼,它們分別是定義表、定義數據庫連接、進行增、刪、改、查等邏輯操作。

定義表的實例:

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,String
Base=declarative_base()
class Accout(Base):
 __tablename__=u'accout'
 id=Column(Integer,primary_key=True)
 user_namr=Column(String(50),nullable=False)
 password=Column(String(200),nullable=False)
 title=Column(String(50))
 salary=Column(Integer)

 def is_active(self):
 #假設所有
 return True

 def get_id(self):
 #返回賬號ID,用方法返回屬性值提高了表的封裝性。
 return self.id

 def is_authenticated(self):
 #假設已經通過驗證
 return True

 def is_anonymous(self):
 #具有登陸名和密碼的賬號不是匿名用戶
 return False

解析定義表的代碼如下:

  • SQLAlchemy表之前必須必須引入sqlalchemy.ext.declarative_base,并定義一個它的實例Base。所有表必須繼承自Base。本例中定義了一個賬戶表類Account。

  • 通過__tablename__屬性定義了表在數據庫中實際的名稱account。

  • 引入sqlalchemy包中的Column、Integer、String類型,因為需要用它們定義表中的列。本例在Account表中定義了5個列,分別是整型id和salary,以及字符串類型的user_name、password、title。

  • 在定義列時可以通過給Column傳送參數定義約束。本例中通過primary_key參數將id列定義主鍵,通過nullable參數將user__name和password定義非空。

  • 在表中還可以自定義其他函數。本例中定義了用戶驗證時常用的幾個函數:is__activite()、get__id()、is__authenticate()和is_anonymous()。

  • 定義數據庫連接的示例代碼如下:

    from sqlalchemy import create_engine
    from sqlalchemy.orm import scoped_session,sessionmaker
    from contextlib import contextmanager
    
    db_connect_string='mysql://v_user:v_pase@localhost:3306/test_database?charset=utf8'
    
    ssl_args={
     'ssl':{
     'cert':'/home/ssl/client-cert.pem',
     'key':'/home/shouse/ssl/client-key.pem',
     'ca':'/home/shouse/ssl/ca-cert.pem'
     }
    }
    engine=create_engine(db_connect_string,connect_args=ssl_args)
    SessionType=scoped_session(sessionmaker(bind=engine,expire_on_commit=False))
    def GetSession():
     return SessionType()
    
    @contextmanager
    def session_scope():
     session=GetSession()
     try:
     yield session
     session.commit()
     except:
     session.rollback()
     raise
     finally:
     session.close()

    解析此連接數據部分的代碼如下:

  • 引入數據庫和會話引擎:sqlalchemy.create_engine、sqlalchemy.orm.scoped_session、sqlalchemy.orm.sessionmaker。

  • 定義連接數據庫需要用到的數據庫字符串。本例連接MySQL數據庫,字符串格式為[databse_type]://[user_name]:[password]@[domain]:[port]/[database]?[parameters]。本例中除了必須的連接信息,還傳入了charset參數,指定用utf-8編碼方式解碼數據庫中的字符串。

  • 用create_engine建立數據庫引擎,如果數據庫開啟了SSL鏈路,則在此處需要傳入ssl客戶端證書的文件路徑。

  • 用scoped_session(sessionmaker(bind=engine))建立會話類型SessionType,并定義函數GetSession()用以創建SessionType的實例。

  • 至此,已經可以用GetSession()函數創建數據庫會話并進行數據庫操作了。但為了使之后的數據庫操作的代碼能夠自動進行事務處理,本例中定義了上下文函數session_scope()。在Python中定義上下文函數的方法是為其加入contextlib包中的contextmanager裝飾器。在上下文函數中執行如下邏輯:在函數開始時建立數據庫會話,此時會自動建立一個數據庫事務:當發生異常時回滾(rollback)事務;當退出時關閉(close)連接。在關閉連接時會自動進行事務提交(commit)操作。

    進行數據庫操作的代碼:

    from sqlalchemy import or_,orm
    def InsertAccount(user,passwd,title,salary): #新增操作
     with session_scope() as session:
     account=orm.Account(user_name=user,passwd=passwd,title=title,salary=salary)
     session.add(account)
    
    def GetAccount(id=None,user_name=None): #查詢操作
     with session_scope() as session:
     return session.query(orm.Account).filter(
     or_(orm.Account.id==id,orm.Account.user_name=user_name)
     ).first()
    
    def DeleteAccount(user_name): #刪除操作
     with session_scope() as session:
     account=GetAccount(user_name=user_name)
     if account:
     session.delete(account)
    
    def UpdateAccount(id,user_name,password,title,salary): #更新操作
     with session_scope() as session:
     account=session.query(orm.Account).filter(orm.Account.id==id).first()
     if not account:return
     account.user_name=user_name
     account.password=password
     account.salary=salary
     account.title=title
    
    
    InsertAccount("Mark","123","Manager",3000) #調用新增操作
    InsertAccount("帥哥","456","Boss",2000) #調用新增操作
    GetAccount(2) #調用查詢操作
    DeleteAccount("Mark")
    UpdateAccount(1,"admin","none","System admin",2500)

    本例演示了數據庫中最常用的4種基于記錄的操作:新增、查找、刪除、更新。對此部分代碼的解析如下:

  • 用import語句引入數據表(Account)所在的包orm。引入多條件查詢時使用or_。

  • 每個函數中都通過with語句啟用上下文函數session_scope(),通過它獲取到session對象,并自動開啟新事物。

  • 在InsertAccount中,通過新建一個表Account實例,并通過session.add將其添加到數據庫中。由于上下文函數退出時會自動提交事務,所以無需顯示的調用session.commit()使新增生效。

  • 在GetAccount中通過query語句進行查詢,查詢條件由filter設置,多個查詢條件可以用or_或and_連接。

  • 在DeleteAccount中通過GetAccount查詢該對象,如果查詢到了,則直接調用session.delete()將該對象刪除。

  • 在InsertAccount()中通過query根據id查詢記錄,如果查詢到了,則通過設置對象的屬性實現對記錄的修改。

  • 查詢語句的結果是一個對象集合。查詢語句后面的first()函數用于提取該集合中的第一個對象,如果用all()函數替換first()函數,查詢則會返回該集合。

  • 主流數據庫的連接方式

    SQLAlchemy這樣的orm數據庫操作方式可以對業務開發者屏蔽不同數據庫之間的差異,這樣當需要進行數據庫遷移時(比如MySQL遷移到SQLite),則只需要更換數據庫連接字符串。

    下表列出了SQLAlchemy連接主流數據庫時的數據庫字符串的編寫方法:

    數據庫連接字符串
    Microsoft SQLServer'mssql+pymssql://[user]:[pass]@[domain]:[port]/[dbname]'
    MySQL'mysql://[user]:[pass]@[domain]:[port]/[dbname]'
    Oracle'oracle://[user]:[pass]@[domain]:[port/[dbname]]'
    PostgreSQL'postgresql://[user]:[pass]@[domain]:[port]/[dbname]'
    SQLite'sqlite://[file_pathname]'

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    Python下SQLAlchemy的簡單介紹

    Python下SQLAlchemy的簡單介紹:本篇文章給大家帶來的內容是關于php協成實現的詳解(附代碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。SQLAlchemy是Python編程語言下的一款開源軟件。提供了SQL工具包及對象關系映射(ORM)工具,SQLAlchemy使用MIT許可證
    推薦度:
    標簽: 介紹 簡單 下的
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 欧美综合第一页 | 亚洲精品综合久久中文字幕 | www.久久.com| 久久精品国产免费一区 | 欧美aa在线观看 | 欧美激情一区 | 国产夫妻精品 | 91精品导航 | 欧美第1页 | 国产高清不卡码一区二区三区 | 国产一区在线视频 | 一级黄免费 | 欧美日韩国产码高清综合人成 | 久久久久久国产精品视频 | 日韩在线一区二区 | 成人午夜精品 | 欧美不卡视频 | 免费在线观看一区 | 香蕉久久一区二区三区 | 成人毛片在线播放 | 亚洲精品制服丝袜二区 | 欧美日韩在线第一页 | 日韩欧美在线免费观看 | 亚洲国产成人久久综合一 | 亚洲精彩视频 | 亚洲欧美h | 亚洲欧洲国产经精品香蕉网 | 欧美黄色网页 | 欧美色视频在线观看 | 黄色一级视频免费观看 | 国产一区二区三区高清 | 天天操夜夜逼 | 久草中文视频 | 国产高清免费在线观看 | 亚洲色图在线播放 | 欧美日韩在线精品一区二区三区 | 国产精品永久免费自在线观看 | 久久伊人免费 | 亚洲综合图片小说区热久久 | 国产精在线 | 热久久国产欧美一区二区精品 |