這個問題 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]