Questions tagged «sqlalchemy»

SQLAlchemy是Python SQL工具箱和对象关系映射器,为应用程序开发人员提供了SQL的全部功能和灵活性。

2
SQLAlchemy可以执行的示例,而Django ORM不能执行的示例
我最近在将Pyramid与SQLAlchemy结合使用以及在Django中保留当前应用程序方面进行了大量研究。那本身就是一个完整的辩论,但是我不是在这里讨论。 我想知道的是,为什么普遍认为SQLAlchemy比Django ORM好?我发现两者之间的几乎每一个比较(如果不是每个比较)都有利于SQLAlchemy。我认为性能是很大的,因为SQLAlchemy的结构使它可以更平滑地转换为SQL。 但是,我也听说过,通过更艰巨的任务,几乎不可能使用Django ORM。我想确定一个问题有多大。我一直在阅读切换到SQLAlchemy的原因之一是Django ORM不再适合您的需求。 简而言之,有人可以提供SQLAlchemy可以执行的查询(不一定是实际的SQL语法),但是Django ORM如果不添加其他原始SQL便无法做到? 更新: 自从我第一次问起这个问题以来,我就一直注意到这个问题,所以我想多花2美分。 最后,我们最终使用了SQLAlchemy,我必须对这个决定感到满意。 我正在重新讨论这个问题,以提供SQLAlchemy的其他功能,到目前为止,我还无法在Django ORM中进行复制。如果有人可以提供有关此操作的示例,那么我很乐意吃我的话。 假设您要使用一些postgresql函数,例如sameity(),该函数提供了模糊的比较(请参阅:使用PostgreSQL快速查找相似的字符串-tl; dr输入两个字符串会返回相似性百分比)。 我已经在使用Django ORM的方法上进行了一些搜索,发现除了使用原始sql之外,什么都没有发现,这从他们的文档中可以明显看出:https : //docs.djangoproject.com/en/dev/topics/db / sql /。 即 Model.objects.raw('SELECT * FROM app_model ORDER BY \ similarity(name, %s) DESC;', [input_name]) 但是,SQLalchemy具有func(),如下所述:http ://docs.sqlalchemy.org/en/latest/core/sqlelement.html#sqlalchemy.sql.expression.func from sqlalchemy import desc, func session.query(Model).order_by(func.similarity(Model.name, input_name)) 这使您可以为任何已定义的sql / postgresql / etc函数生成sql,而无需使用原始sql。

9
如何优雅地检查对象/实例/变量的存在,并同时将其分配给python中存在的变量?
我正在使用SQLAlchemy填充数据库,并且经常需要在处理之前检查数据库中是否存在orm对象。这可能是一个非常规的问题,但是我发现自己经常遇到这种模式: my_object = session.query(SomeObject).filter(some_fiter).first() if my_object: # Mostly in databases... # Juchee it exists # process else: # It does not exist. :-( my_object = SomeObject() # process 我在做梦of的是: if my_object = session.query(someObject).blabla.first(): # if my_object is None this scope is left alone # if my_object is not None I …

6
SQL Alchemy ORM返回单个列,如何避免常见的后期处理
我使用的是SQL Alchemy的ORM,发现返回单列时,结果如下: [(result,), (result_2,)] # etc... 使用这样的集合,我发现我必须经常这样做: results = [r[0] for r in results] # So that I just have a list of result values 这并不是那么“糟糕”,因为我的结果集通常很小,但是如果不是这样,则可能会增加大量开销。最大的事情是我感到源代码混乱,而错过此步骤是我遇到的一个非常常见的错误。 有什么办法可以避免这个额外的步骤? 除了一个相关的问题:在这种情况下,orm的这种行为似乎很不方便,但是在另一种情况下,我的结果集是[[id,value)],它最终像这样结束: [(result_1_id, result_1_val), (result_2_id, result_2_val)] 然后,我可以这样做: results = dict(results) # so I have a map of id to value 这具有返回结果后有意义的有用步骤的优点。 这真的是问题吗,还是我只是一个小问题,得到结果集后的后处理在两种情况下都有意义?我确定我们可以想到其他一些常见的后处理操作,以使结果集在应用程序代码中更可用。是否有一个全面的高性能和便捷的解决方案,或者后处理是不可避免的,而仅仅是不同应用程序使用所必需的? 当我的应用程序实际上可以利用SQL Alchemy的ORM返回的对象时,它似乎非常有帮助,但是在我不能或不可以的情况下,它就没有那么多了。这仅仅是ORM的普遍问题吗?在这种情况下,我最好不要使用ORM层吗? …
73 python  orm  sqlalchemy 

4
在Sqlalchemy中进行枚举的最佳方法?
我正在阅读有关sqlalchemy的信息,并且看到了以下代码: employees_table = Table('employees', metadata, Column('employee_id', Integer, primary_key=True), Column('name', String(50)), Column('manager_data', String(50)), Column('engineer_info', String(50)), Column('type', String(20), nullable=False) ) employee_mapper = mapper(Employee, employees_table, \ polymorphic_on=employees_table.c.type, polymorphic_identity='employee') manager_mapper = mapper(Manager, inherits=employee_mapper, polymorphic_identity='manager') engineer_mapper = mapper(Engineer, inherits=employee_mapper, polymorphic_identity='engineer') 我应该在库中使用常量将“类型”设置为int吗?还是我应该使枚举成为枚举?

3
如何关闭SQLAlchemy会话?
遵循我们在如何关闭MySQL中的sqlalchemy连接中的评论之后,我正在检查SQLAlchemy创建到我的数据库中的连接,如果不退出Python,我将无法关闭它们。 如果我在python控制台中运行此代码,它将保持会话打开状态,直到我退出python为止: from sqlalchemy.orm import sessionmaker from models import OneTable, get_engine engine = get_engine(database="mydb") session = sessionmaker(bind=engine)() results = session.query(OneTable.company_name).all() # some work with the data # session.close() 我发现要关闭它的唯一解决方法是engine.dispose()在最后调用。 根据我上面给出的链接中的评论,我的问题现在是: 为什么engine.dispose()需要关闭会议? 还session.close()不够吗

10
如何围绕现有数据库构建Flask应用程序?
我已经有一个现有的数据库,其中包含很多表和很多数据MySQL。我打算创建一个Flask应用程序,并与它一起使用sqlalchemy。现在,我在irc上查询了一下,然后在Google上环顾了一下,并尝试了以下想法: 首先,我使用sqlacodegen从我的生成模型DB。但是后来我对此有些困惑,看上去有些困惑。我发现了这个。 这看起来是一个优雅的解决方案。 因此,第二,我models.py根据那里的解决方案重写了自己的内容,现在我更加困惑了。我正在寻找与现有数据库一起构建此Flask应用程序的最佳方法。 我查看了flask文档,但对于具有现有数据库的项目并没有真正获得任何帮助。从头开始创建东西,创建数据库以及所有东西都有很多好东西。但是我真的很困惑。 请注意,这是我的第一天工作Flask经验,但我有的经验Django,因此基本概念并非障碍。在为该用例选择最佳方法时,我需要一些指导。详细的解释将不胜感激。详细地说,我绝对不希望有人编写所有代码并为此而spoon之以鼻,但这足以使我起步,即将该数据库无缝集成到flaskvia中sqlalchemy。注意我的数据库在MySQL。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.