当前位置:  开发笔记 > 编程语言 > 正文

如何使用Session或Engine查询原始SQL

如何解决《如何使用Session或Engine查询原始SQL》经验,为你挑选了1个好方法。

随着ParentChild表:

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:pass@localhost/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变量是常规的Python ORM对象。

如果我查询一个数据库而不是创建一个数据库,查询结果将是一个ORM对象列表:

result = session.query(Parent).order_by(desc(Parent.uuid)).all()

但是有时我们需要使用原始Sql命令查询数据库。有没有一种方法可以使用sessionobject 运行原始SQL命令,以确保生成的查询返回是ORM对象还是对象列表?



1> the_constant..:

您可以使用execute()Session方法:

session.execute('select * from table')

可以在这里找到execute方法的文档:

http://docs.sqlalchemy.org/en/latest/orm/session_api.html#sqlalchemy.orm.session.Session.execute

请注意,这不能防止SQL注入。

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有