С Parent
и Child
таблицы:Как запросить с сырым SQL с помощью сеанса или двигатель
from sqlalchemy import Column, ForeignKey, String, create_engine, desc, asc
from sqlalchemy.ext.declarative import declarative_base
import uuid
Base = declarative_base()
class Parent(Base):
__tablename__ = 'parents'
uuid = Column(String(64), primary_key=True, unique=True)
def __init__(self):
self.uuid = uuid.uuid4()
class Child(Base):
__tablename__ = 'children'
uuid = Column(String(64), primary_key=True, unique=True)
parent_uuid = Column(String(64), ForeignKey('parents.uuid'))
def __init__(self, parent_uuid=None):
self.uuid = uuid.uuid4()
self.parent_uuid = parent_uuid
Я могу идти вперед и создать Parent
объект:
engine = create_engine('mysql://root:[email protected]/dbname', echo=False)
session = scoped_session(sessionmaker())
session.remove()
session.configure(bind=engine, autoflush=False, expire_on_commit=False)
parent = Parent()
session.add(parent)
session.commit()
session.close()
В результате parent
переменная является регулярным Объект ORM Python.
Если бы я запрос к базе данных вместо создания одного результатом запроса будет список объектов ORM:
result = session.query(Parent).order_by(desc(Parent.uuid)).all()
Но бывают случаи, когда необходимо запрашивать базу данных с использованием сырой команды Sql. Есть ли способ запустить необработанную команду SQL с использованием объекта session
, чтобы гарантировать, что результирующий запрос является объектом ORM или списком объектов?
'result = engine.execute ('SELECT * FROM parents'). Fetchall()'? Но это вернет список объектов ResultProxy ... – alphanumeric
Вы можете перебирать объекты ResultProxy по очереди с циклом for на ResultProxy, как описано в разделе ** Основное использование ** на этой странице: http : //docs.sqlalchemy.org/en/latest/core/connections.html –