В чем разница между Django ORM и Flask-Sqlalchemy в использовании фильтра? - PullRequest
0 голосов
/ 08 октября 2018

Привет, друзья по всему миру, есть проблема, которая меня озадачивает на несколько дней. Когда я использовал Django, я использовал obj=User.objects.filter(uname=username,pwd=password) Пользователь - это класс для перехода на MySQL, но когда я использовал Flask-Sqlalchemy obj = User.query.filter(User.uname == username, User.pwd == password).first() Iнужно сделать это, чтобы реализовать логин.Я думаю, что есть что-то отличное между Джанго и Фляском.Я знаю, что "=" - это оператор присваивания, а "==" - оператор отношения.Спасибо, что можете мне помочь, спасибо!

1 Ответ

0 голосов
/ 08 октября 2018

Прежде всего, это не Flask или Django, который делает такую ​​вещь!

Тот, который вы использовали с Flask, это SQL-Alchemy, а тот, который вы использовали с DjangoDjango ORM, Вы можете использовать их автономно без Flask или Django Project!

В обоих фрагментах Вы назначаете объект переменной!

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 возвратит итерируемые строки, которые встретилисьнаше условие!

Вы можете использовать all() вместо first() на SQL-Alchemy и получить такой же результат, как Django ORM!

Существует метод с именем filter_by() on SQL-Alchemy, который больше похож на ваш Django ORM пример. Он по-прежнему получает только один или 404, если вы используете first() в конце, но вы можете установить условие без операторов условия, но присваивая их параметрам метода, например:

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

Проверьте это StackOverflow Вопрос для получения дополнительной информации о filter против filter_by на SQL-Alchemy

...