<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題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關(guān)鍵字專題關(guān)鍵字專題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
        當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

        Python下SQLAlchemy的簡單介紹

        來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 14:20:42
        文檔

        Python下SQLAlchemy的簡單介紹

        Python下SQLAlchemy的簡單介紹:本篇文章給大家?guī)淼膬?nèi)容是關(guān)于php協(xié)成實(shí)現(xiàn)的詳解(附代碼),有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。SQLAlchemy是Python編程語言下的一款開源軟件。提供了SQL工具包及對(duì)象關(guān)系映射(ORM)工具,SQLAlchemy使用MIT許可證
        推薦度:
        導(dǎo)讀Python下SQLAlchemy的簡單介紹:本篇文章給大家?guī)淼膬?nèi)容是關(guān)于php協(xié)成實(shí)現(xiàn)的詳解(附代碼),有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。SQLAlchemy是Python編程語言下的一款開源軟件。提供了SQL工具包及對(duì)象關(guān)系映射(ORM)工具,SQLAlchemy使用MIT許可證

        本篇文章給大家?guī)淼膬?nèi)容是關(guān)于php協(xié)成實(shí)現(xiàn)的詳解(附代碼),有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。

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

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

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

        定義表的實(shí)例:

        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):
         #假設(shè)所有
         return True
        
         def get_id(self):
         #返回賬號(hào)ID,用方法返回屬性值提高了表的封裝性。
         return self.id
        
         def is_authenticated(self):
         #假設(shè)已經(jīng)通過驗(yàn)證
         return True
        
         def is_anonymous(self):
         #具有登陸名和密碼的賬號(hào)不是匿名用戶
         return False

        解析定義表的代碼如下:

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

      2. 通過__tablename__屬性定義了表在數(shù)據(jù)庫中實(shí)際的名稱account。

      3. 引入sqlalchemy包中的Column、Integer、String類型,因?yàn)樾枰盟鼈兌x表中的列。本例在Account表中定義了5個(gè)列,分別是整型id和salary,以及字符串類型的user_name、password、title。

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

      5. 在表中還可以自定義其他函數(shù)。本例中定義了用戶驗(yàn)證時(shí)常用的幾個(gè)函數(shù):is__activite()、get__id()、is__authenticate()和is_anonymous()。

      6. 定義數(shù)據(jù)庫連接的示例代碼如下:

        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()

        解析此連接數(shù)據(jù)部分的代碼如下:

      7. 引入數(shù)據(jù)庫和會(huì)話引擎:sqlalchemy.create_engine、sqlalchemy.orm.scoped_session、sqlalchemy.orm.sessionmaker。

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

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

      10. 用scoped_session(sessionmaker(bind=engine))建立會(huì)話類型SessionType,并定義函數(shù)GetSession()用以創(chuàng)建SessionType的實(shí)例。

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

        進(jìn)行數(shù)據(jù)庫操作的代碼:

        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) #調(diào)用新增操作
        InsertAccount("帥哥","456","Boss",2000) #調(diào)用新增操作
        GetAccount(2) #調(diào)用查詢操作
        DeleteAccount("Mark")
        UpdateAccount(1,"admin","none","System admin",2500)

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

      12. 用import語句引入數(shù)據(jù)表(Account)所在的包orm。引入多條件查詢時(shí)使用or_。

      13. 每個(gè)函數(shù)中都通過with語句啟用上下文函數(shù)session_scope(),通過它獲取到session對(duì)象,并自動(dòng)開啟新事物。

      14. 在InsertAccount中,通過新建一個(gè)表Account實(shí)例,并通過session.add將其添加到數(shù)據(jù)庫中。由于上下文函數(shù)退出時(shí)會(huì)自動(dòng)提交事務(wù),所以無需顯示的調(diào)用session.commit()使新增生效。

      15. 在GetAccount中通過query語句進(jìn)行查詢,查詢條件由filter設(shè)置,多個(gè)查詢條件可以用or_或and_連接。

      16. 在DeleteAccount中通過GetAccount查詢?cè)搶?duì)象,如果查詢到了,則直接調(diào)用session.delete()將該對(duì)象刪除。

      17. 在InsertAccount()中通過query根據(jù)id查詢記錄,如果查詢到了,則通過設(shè)置對(duì)象的屬性實(shí)現(xiàn)對(duì)記錄的修改。

      18. 查詢語句的結(jié)果是一個(gè)對(duì)象集合。查詢語句后面的first()函數(shù)用于提取該集合中的第一個(gè)對(duì)象,如果用all()函數(shù)替換first()函數(shù),查詢則會(huì)返回該集合。

      19. 主流數(shù)據(jù)庫的連接方式

        SQLAlchemy這樣的orm數(shù)據(jù)庫操作方式可以對(duì)業(yè)務(wù)開發(fā)者屏蔽不同數(shù)據(jù)庫之間的差異,這樣當(dāng)需要進(jìn)行數(shù)據(jù)庫遷移時(shí)(比如MySQL遷移到SQLite),則只需要更換數(shù)據(jù)庫連接字符串。

        下表列出了SQLAlchemy連接主流數(shù)據(jù)庫時(shí)的數(shù)據(jù)庫字符串的編寫方法:

        數(shù)據(jù)庫連接字符串
        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]'

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Python下SQLAlchemy的簡單介紹

        Python下SQLAlchemy的簡單介紹:本篇文章給大家?guī)淼膬?nèi)容是關(guān)于php協(xié)成實(shí)現(xiàn)的詳解(附代碼),有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。SQLAlchemy是Python編程語言下的一款開源軟件。提供了SQL工具包及對(duì)象關(guān)系映射(ORM)工具,SQLAlchemy使用MIT許可證
        推薦度:
        標(biāo)簽: 介紹 簡單 下的
        • 熱門焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 丰满人妻一区二区三区免费视频| 亚洲国产精品成人综合色在线| 久青草国产免费观看| 国产传媒在线观看视频免费观看| 亚洲精品成a人在线观看夫| 成人免费无码大片A毛片抽搐 | 天天干在线免费视频| 亚洲1区1区3区4区产品乱码芒果| 热re99久久6国产精品免费| 亚洲bt加勒比一区二区| 亚洲欧洲免费视频| 亚洲一级毛片视频| 色吊丝最新永久免费观看网站| 亚洲AV无码一区二区三区性色 | 伊人久久精品亚洲午夜| 国产午夜无码精品免费看动漫| 亚洲AV无码乱码国产麻豆 | 亚洲视频在线不卡| 国产男女爽爽爽爽爽免费视频| 亚洲免费在线观看| 亚洲中文无码永久免| 国产免费牲交视频| 国产午夜精品理论片免费观看| 亚洲第一成年男人的天堂| 国产免费女女脚奴视频网| 亚洲av无码专区在线电影天堂 | 亚洲国产成人一区二区精品区| 污污网站免费观看| 一本色道久久88—综合亚洲精品 | 久久精品国产亚洲一区二区三区| 97在线免费视频| 亚洲色图综合网站| 国产精品99久久免费| 免费国产午夜高清在线视频| 亚洲一区二区三区高清视频| 免费在线观看a级毛片| 免费无码VA一区二区三区| 亚洲大尺度无码无码专线一区| 亚洲三区在线观看无套内射| 69xx免费观看视频| 一本久久A久久免费精品不卡|