본문 바로가기
MySql

MySQL Flask SQLAlchemy 값 또는 다른 필터

by 베이스 공부 2020. 10. 31.
반응형

Flask-SQLAlchemy 를 통해 MySQL db와 상호 작용하는 Flask 프로젝트가 있습니다.

내 질문은 값 또는 다른 값을 기반으로 데이터베이스에서 행을 선택하는 방법입니다.

SELECT id FROM users WHERE email=email OR name=name;

Flask-SQLAlchemy 에서이를 달성하는 방법은 무엇입니까?

 

해결 방법

 

다음이 도움이 될 수 있습니다.

# app.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'url_or_path/to/database'
db = SQLAlchemy(app)

class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(50), unique=True)
    name = db.Column(db.String(30))

    def __init__(self, name=None, email=None):
        if not name:
            raise ValueError('\'name\' cannot be None')
        if not email:
            raise ValueError('\'email\' cannot be None')
        self.name = name
        self.email = email

class UserQuery(object):
    @staticmethod
    def get_user_id_by_email_or_name(email=None, name=None):
        user = User.query.filter((User.email == email) | (User.name == name)).first()
        return user.id if hasattr(user, 'id') else None


다음과 같이 사용할 수 있습니다.

>>> from app import db, User, UserQuery
>>> db.create_all()
>>> user = User(name='stan', email='stan@email.com')
>>> db.session.add(user)
>>> db.session.commit()
>>> by_name_id = UserQuery.get_user_id_by_email_or_name(name='stan')
>>> by_email_id = UserQuery.get_user_id_by_email_or_name(email='stan@email.com')
>>> by_name_id == by_email_id
True

 

참조 페이지 https://stackoverflow.com/questions/40535547

 

 

반응형

댓글