如何descending在SQLAlchemy查询中使用ORDER BY ,如下所示?
此查询有效,但按升序返回:
query = (model.Session.query(model.Entry)
.join(model.ClassificationItem)
.join(model.EnumerationValue)
.filter_by(id=c.row.id)
.order_by(model.Entry.amount) # This row :)
)
Run Code Online (Sandbox Code Playgroud)
如果我尝试:
.order_by(desc(model.Entry.amount))
Run Code Online (Sandbox Code Playgroud)
然后我得到:NameError: global name 'desc' is not defined.
我正在尝试在sqlalchemy中执行此查询
SELECT id, name FROM user WHERE id IN (123, 456)
Run Code Online (Sandbox Code Playgroud)
我想[123, 456]在执行时绑定列表.
我指的是以下教程,为我的Web应用程序创建一个登录页面. http://code.tutsplus.com/tutorials/intro-to-flask-signing-in-and-out--net-29982
我遇到了数据库问题.我得到了一个
ImportError: No module named MySQLdb
Run Code Online (Sandbox Code Playgroud)
当我执行
http://127.0.0.1:5000/testdb
Run Code Online (Sandbox Code Playgroud)
我已经尝试了所有可能的方法来安装python mysql,教程中提到的一个,easy_install,sudo apt-get install.
我在我的虚拟环境中安装了mysql.我的目录结构与本教程中解释的相同.该模块已成功安装在我的系统中,但仍然出现此错误.
请帮忙.可能导致这种情况的原因.
如何更新行的信息?
例如,我想更改id为5的行的name列.
我想在sqlalchemy中使用"group by and count"命令.我怎样才能做到这一点?
我有一个简单的Spring Boot应用程序,它从JMS队列获取消息并将一些数据保存到日志文件中,但不需要Web服务器.有没有办法在没有Web服务器的情况下启动Spring Boot?
如何使用Flask-SQLAlchemy删除单个表中的所有行?
寻找这样的东西:
>>> users = models.User.query.all()
>>> models.db.session.delete(users)
# but it errs out: UnmappedInstanceError: Class '__builtin__.list' is not mapped
Run Code Online (Sandbox Code Playgroud) 我最近在使用Pyramid和SQLAlchemy进行了大量的研究,而不是在Django中保留当前的应用程序.这本身就是一场辩论,但我不是在讨论这个问题.
我想知道的是,为什么SQLAlchemy普遍被认为比Django ORM更好?几乎每一个(如果不是每一个)我在SQLAlchemy这两个好处之间找到的比较.我认为性能是一个很大的性能,因为SQLAlchemy的结构可以让它更顺利地转换为SQL.
但是,我也听说过,使用更难的任务,Django ORM几乎不可能使用.我想说明这可能是一个多大的问题.我一直在阅读切换到SQLAlchemy的原因之一是当Django ORM不再适合您的需求时.
因此,简而言之,有人可以提供SQLAlchemy可以执行的查询(不一定是实际的SQL语法),但Django ORM不可能在没有添加额外的原始SQL的情况下做到吗?
更新:
自从我第一次问到这个问题以来,我一直注意到这个问题得到了很多关注,所以我想多花两美分.
最后我们最终使用了SQLAlchemy,我必须说我对这个决定感到满意.
我正在重新审视这个问题以提供SQLAlchemy的一个额外功能,到目前为止,我还没有能够在Django ORM中复制.如果有人可以提供一个如何做到这一点的例子,我会很乐意吃掉我的话.
假设您想使用一些postgresql函数,例如similarity(),它提供模糊比较(请参阅:快速查找与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])
Run Code Online (Sandbox Code Playgroud)
但是,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))
Run Code Online (Sandbox Code Playgroud)
这允许您为任何已定义的sql/postgresql/etc函数生成sql,而不需要原始sql.
我有3个表:User,Community,community_members(用于关系many2many的用户和社区).
我使用Flask-SQLAlchemy创建这个表:
community_members = db.Table('community_members',
db.Column('user_id', db.Integer, db.ForeignKey('user.id')),
db.Column('community_id', db.Integer, db.ForeignKey('community.id')),
)
class Community(db.Model):
__tablename__ = 'community'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100), nullable=False, unique=True)
members = db.relationship(User, secondary=community_members,
backref=db.backref('community_members', lazy='dynamic'))
Run Code Online (Sandbox Code Playgroud)
现在我想向community_members添加其他字段,如下所示:
community_members = db.Table('community_members',
db.Column('id', db.Integer, primary_key=True),
db.Column('user_id', db.Integer, db.ForeignKey('user.id')),
db.Column('community_id', db.Integer, db.ForeignKey('community.id')),
db.Column('time_create', db.DateTime, nullable=False, default=func.now()),
)
Run Code Online (Sandbox Code Playgroud)
现在在python shell中我可以这样做:
创建社区:
> c = Community()
> c.name = 'c1'
> db.session.add(c)
> db.session.commit()
Run Code Online (Sandbox Code Playgroud)
将成员添加到社区:
> u1 = User.query.get(1)
> u2 = User.query.get(2)
> c.members.append(u1)
> c.members.append(u2)
> db.session.commit() …Run Code Online (Sandbox Code Playgroud) 我试图设置一个postgresql表,它有两个指向另一个表中相同主键的外键.
当我运行脚本时,我收到错误
sqlalchemy.exc.AmbiguousForeignKeysError:无法确定关系Company.stakeholder上的父/子表之间的连接条件 - 有多个链接表的外键路径.指定'foreign_keys'参数,提供应列为包含对父表的外键引用的列的列表.
这是SQLAlchemy文档中的确切错误,但当我复制它们提供的解决方案时,错误不会消失.我能做错什么?
#The business case here is that a company can be a stakeholder in another company.
class Company(Base):
__tablename__ = 'company'
id = Column(Integer, primary_key=True)
name = Column(String(50), nullable=False)
class Stakeholder(Base):
__tablename__ = 'stakeholder'
id = Column(Integer, primary_key=True)
company_id = Column(Integer, ForeignKey('company.id'), nullable=False)
stakeholder_id = Column(Integer, ForeignKey('company.id'), nullable=False)
company = relationship("Company", foreign_keys='company_id')
stakeholder = relationship("Company", foreign_keys='stakeholder_id')
Run Code Online (Sandbox Code Playgroud)
我在这里看到过类似的问题,但有些答案建议人们primaryjoin在文档中使用a 表明你primaryjoin在这种情况下不需要.
python ×9
sqlalchemy ×9
count ×1
django-orm ×1
flask ×1
group-by ×1
java ×1
many-to-many ×1
mysql ×1
mysql-python ×1
orm ×1
postgresql ×1
spring-boot ×1