我正在使用SQLAlchemy进行一些数据处理并创建一些表。我正在使用orm_table
类Declarative Base
定义的表ORMTable
加载数据,因此可以使用session.query(ORMTable).all()
语句查询数据库。
但是,我还需要查询数据库中已存在但未在orm中定义的另一个表non_orm_table
。如何在同一会话中查询此表?我没有与之相关的课程,所以想知道这种情况的标准做法是什么?
答案 0 :(得分:2)
以下是制作它的代码段:
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
属性。它会将现有的表字段名称动态映射到类中。
我希望它有所帮助。
答案 1 :(得分:1)
您也可以按照以下步骤进行操作。
#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)