如何查询SQLalchemy Orm会话中的现有表



我正在使用sqlalchemy进行一些数据处理并创建一些表。我正在使用Declarative BaseORMTable定义的表orm_table加载数据,因此可以使用session.query(ORMTable).all()语句查询数据库。

但是,我还需要查询数据库中已经存在并且未在ORM中定义的另一个表non_orm_table。如何在同一会话中查询此表?我没有与之相关的课程,所以想知道这种情况的标准做法是什么?

这是使其制作的代码片段:

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
engine = create_engine('<db_connection_string>', echo=True)
Base = declarative_base(engine)

class NonOrmTable(Base):
    """
    eg. fields: id, title
    """
    __tablename__ = 'non_orm_table'
    __table_args__ = {'autoload': True}

def loadSession():
    """"""
    metadata = Base.metadata
    Session = sessionmaker(bind=engine)
    session = Session()
    return session

if __name__ == "__main__":
    session = loadSession()
    res = session.query(NonOrmTable).all()
    print res[1].title

关键是使用SqlAlchemy’s autoload属性。它会动态地将现有表字段名称映射到类。

我希望它有帮助。

您也可以如下。

  #Considering account is your table and first_name is a column
  from sqlalchemy import create_engine, select, MetaData, Table
  CONN = create_engine('postgresql+psycopg2://username:password@localhost:5432/dbname', 
  client_encoding="UTF-8") 
  META_DATA = MetaData(bind=CONN, reflect=True)
  account = META_DATA.tables['account']
  stmt = select([account]).where(account.columns.first_name == 'Michael')
  connection = CONN.connect()
  results = connection.execute(stmt).fetchall()
  # to print the result
  for result in results:
      print(result)

最新更新