利用sqlalchemy 查詢視圖


這個問題 google 百度 中英文搜了一上午。最新的回答還是 7年前。最后自己靠着官方文檔的自己改出來一個比較方便的方法

使用環境

  • python == 3.7.0
  • SQLAlchemy === 1.2.14
  • sqlacodegen === 2.0.1

生成視圖對應的ORM類

首先對於已經有數據表的項目來說可以使用sqlacodegen來快速構建表對應的類命令如下

sqlacodegen --noviews --noconstraints --outfile=/root/models.py mssql+pymssql://sa:123456@locahost/test?charset=utf8

--noviews 表示不會生成視圖對應的類 這里當然要取消,所以說最終命令為

sqlacodegen --noconstraints --outfile=models.py mysql+pymysql://sa:123456@locahost/test?charset=utf8

通過命令會生成一個類似這樣的視圖對應的ORM類

metadata = Base.metadata
t_vw_test = Table(
    'vw_test', metadata,
    Column('Id', Integer),
    Column('Date',DateTime),
)

如果沒有數據表希望通過sqlalchemy生成數據表的話這里沒有嘗試

查詢視圖

查詢視圖的方法基本和查詢普通表相同只注意 表的字段需要通過columns獲取

def userInfo(self, Goodsid):
    ret = self.conn.query(
        #獲取整行
        sqlaclORM.t_vw_test
        #獲取單個字段數據
        #sqlaclORM.t_vw_test.columns["Date"]
        #添加filter查詢條件
    ).filter(sqlaclORM.t_vw_test.columns["Id"] == 1).first()
    return ret

對於返回到的值只有獲取整個字段的數據的方法才能通過.對應字段獲取對應的值

#獲取的整行數據
date = ret.Date
獲取單個需通過數組下標的方式

def userInfo(self, Goodsid):
    ret = self.conn.query(
        #獲取單個字段數據
        sqlaclORM.t_vw_test.columns["Id"]
        sqlaclORM.t_vw_test.columns["Date"]
        #添加filter查詢條件
    ).filter(sqlaclORM.t_vw_test.columns["Id"] == 1).first()
    return ret
date = ret[1]

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM