【问题标题】:What is the difference between Django ORM and Flask-Sqlalchemy in using filter?Django ORM 和 Flask-Sqlalchemy 在使用过滤器上有什么区别?
【发布时间】:2019-03-12 16:28:32
【问题描述】:

嗨,全世界的朋友,有一个问题困扰了我好几天。当我使用 Django 时,我使用了obj=User.objects.filter(uname=username,pwd=password) User 是一个迁移到 MySQL 的类但是当我使用 Flask-Sqlalchemy obj = User.query.filter(User.uname == username, User.pwd == password).first() 我需要这样做才能实现登录。我认为 Django 和 Flask 之间有些不同。我知道“=”是分配运算符,“==”是关系运算符。非常感谢您能帮助我,谢谢!

【问题讨论】:

  • 不是Flask,是SQL-Alchemy,另一个不是Django,是Django ORM
  • @DarkSuniuM 虽然我同意第一部分,但第二部分具有误导性,因为 Django ORM 是 Django 的一部分。
  • @KlausD。它是一个单独的应用程序,您可以单独使用它,您可以删除在您的项目的settings.py 中添加Django ORMdjango 的行,它属于django,但它不是django 本身!
  • 听起来像:不,他没有被车撞到。他只是被汽车的前部撞到。
  • @DarkSuniuM 虽然您的某些观点是有效的,但您可以“删除在 settings.py 中添加 Django ORM 的行”根本不正确。您是否正在考虑身份验证框架?而且你绝对不能使用 Django ORM“独立”。

标签: python sqlalchemy flask-sqlalchemy django-orm


【解决方案1】:

首先,干这种事的不是FlaskDjango

Flask 一起使用的是SQL-Alchemy,与Django 一起使用的是Django ORM,您可以在没有FlaskDjango 项目的情况下单独使用它们!

在两个 sn-ps 上,您正在将一个对象分配给一个变量!

obj = User.objects.filter(uname=username,pwd=password)

等于 MySQL 查询

SELECT * 
FROM users 
WHERE uname = <username> AND pwd = <password>;

同时

obj = User.query.filter(User.uname == username, User.pwd == password).first()

等于 MySQL 查询

SELECT * 
FROM users 
WHERE uname = <username> AND pwd = <password> 
LIMIT BY 1;

所以Django ORM 将返回满足我们条件的可迭代行!

您可以在SQL-Alchemy 上使用all() 而不是first() 并获得与Django ORM 相同的结果!

SQL-Alchemy 上有一个名为filter_by() 的方法,它看起来更像您的Django ORM 示例,如果最后使用first(),它仍然只有一个或404,但是您可以在没有条件运算符的情况下设置条件但是通过将它们分配给方法参数,例如:

obj = User.query.filter_by(uname=username, pwd=password).first()

查看此StackOverflow Question 以获取有关filterfilter_by SQL-Alchemy 上的filter_by 的更多信息

【讨论】:

  • 我试过了,效果很好!感谢您的帮助,我将通过您的链接学习 filter_by() 。实际上我是先学习 Django,现在我开始学习 Flask ,我想我有点困惑..
  • @Vasquez 不要比较它们,这样您就不会感到困惑,顺便说一句,如果有帮助,请接受答案并投票 ;-)
  • 好的,我已经投票了。你帮了我很多。谢谢你的建议,我会在你的建议下努力学习 Flask。
猜你喜欢
  • 2017-09-04
  • 1970-01-01
  • 2019-05-01
  • 2019-05-01
  • 2019-02-11
  • 2018-06-25
  • 2015-04-18
  • 1970-01-01
  • 2015-09-23
相关资源
最近更新 更多