itsource

플라스크-sqlalchemy 또는 sqlalchemy

mycopycode 2023. 7. 21. 21:36
반응형

플라스크-sqlalchemy 또는 sqlalchemy

저는 플라스크와 sqlalchemy 둘 다 처음이고, 이제 막 flask 앱을 시작했고, 현재 sqlalchemy를 사용하고 있습니다.플라스크-sqlalchemy 대 sqlalchemy를 사용함으로써 얻을 수 있는 중요한 이점이 있는지 궁금합니다.저는 http://packages.python.org/Flask-SQLAlchemy/index.html 에서 충분한 동기를 찾을 수 없었습니다. 또는 아마도 저는 그 가치를 이해하지 못했을 것입니다!설명해주시면 감사하겠습니다.

의 주요 Flask-SQLAlchemy는 Flask 통합 - 및 및 응용 프로그램과 합니다. Flask 응 프 램 과 의 적 통 한 으 는 엔 진 합 만 연 을 세 결 및 고 들 션 구 며 Flask 구 하 성 응 합 성 다 니 록 과 함 도 램 하 작 동 그 께 로 프 용 용 그 로 로 절 ▁is ▁proper 는 , ation ▁- ▁applic

설정은 범위가 지정된 세션을 생성하고 Flask 애플리케이션 요청/응답 라이프사이클에 따라 적절하게 처리해야 하므로 매우 복잡합니다.

이상적인 세상에서 그것이 유일한 특징이 될 것입니다.Flask-SQLAlchemy하지만 사실, 그것은 몇 가지를 더 추가합니다.자세한 내용은 문서를 확인하십시오.또는 다음 블로그 게시물을 참조하십시오.플라스크-SQ 분해LAlchemy(업데이트: 원본 문서는 현재 사용할 수 없으며 웹 아카이브에 스냅샷이 있습니다.)

플라스크와 SQL 화학을 처음 사용했을 때는 이런 오버헤드가 마음에 들지 않았습니다.저는 확장자에서 세션 관리 코드를 추출했습니다.이 접근 방식은 효과가 있지만, 이 통합을 제대로 수행하는 것이 상당히 어렵다는 것을 알게 되었습니다.

따라서 (제가 진행 중인 다른 프로젝트에서 사용되는) 더 쉬운 접근 방식은 데이터 센터를 중단하는 것입니다.Flask-SQLAlchemy추가 기능을 사용하지 마십시오.당신은 그것을 갖게 될 것입니다.db.session그리고 당신은 그것을 순수한 것처럼 사용할 수 있습니다.SQLAlchemysetupsetup을 합니다.

플라스크-SQLAlchemy는 SQLlchemy를 사용하여 구현할 수 있는 여러 가지 추가 기능을 제공합니다.

플라스크-SQ 사용에 대한 긍정적인 측면라케미


  1. 플라스크_SQLAlchemy는 사용자를 위해 세션 구성, 설정 및 해체를 참조하십시오.
  2. 쿼리 및 페이지 표시를 쉽게 하는 선언적 기본 모델 제공
  3. 백엔드 관련 설정입니다.플라스크-SQ설치된 libs에서 유니코드 지원 여부를 검사하고, 실패할 경우 SQL 케미 유니코드를 자동으로 사용합니다.
  4. 다▁method있니라는 방법이 .apply_driver_hacks으로 MySQL 합니다.
  5. 모든 테이블을 만들고 삭제할 수 있는 create_all() 및 drop_all() 메서드가 포함되어 있습니다.테스트에 유용하고 멍청한 짓을 한 경우 파이썬 명령줄에서 유용합니다.
  6. 그것은 당신에게 get_or_404를 제공하고 find_or_404를 제공합니다. find_or_404는 > http://flask-sqlalchemy.pocoo.org/2.1/queries/ 에서 코드 예제를 찾는 대신 find_or_404를 제공합니다.

테이블 이름을 자동으로 설정합니다. 라크스-SQ는 LAlchemy를 변환하는 합니다.ClassName>class_name 이값재할수있다니습정의을해정다▁setting있니▁this수▁be▁can▁byridden▁over를 설정하면 이를 무시할 수 있습니다.__tablename__ 항목

플라스크-SQ 사용에 대한 부정적인 측면라케미


  1. 플라스크-SQ 사용LA 화학은 플라스크에서 Pyramid로 마이그레이션하는 데 추가적인 어려움을 줄 것입니다.이것은 주로 플라스크_의 사용자 정의 선언적 기본 모델 때문입니다.SQL 화학.
  2. 플라스크-SQ 사용LA 화학 당신은 SQL 화학 자체보다 훨씬 작은 커뮤니티를 가진 패키지를 사용할 위험이 있습니다. 이는 곧 활성화된 개발에서 쉽게 떨어질 수 없습니다.
  3. 몇몇 멋진 엑스트라 플라스크-SQ.만약 당신이 그것들이 거기에 있는지 모른다면, La lchemy는 당신을 혼란스럽게 할 수 있습니다.

솔직히 말해서, 저는 어떤 혜택도 보지 않습니다.IMHO, 플라스크-SQLA 화학은 실제로 필요하지 않은 추가 레이어를 생성합니다.우리의 경우 ORM과 Core를 모두 사용하는 여러 데이터베이스/연결(마스터 슬레이브)이 있는 상당히 복잡한 Flask 애플리케이션이 있으며, 여기서 무엇보다도 세션/DB 트랜잭션(예: 모의 실행 vs 커밋 모드)을 제어해야 합니다.플라스크-SQLAchemy는 사용자에게 필요한 것이 아닌 경우를 가정하여 세션 자동 파기와 같은 몇 가지 추가 기능을 추가합니다.

SQL 화학 문서에는 플라스크-SQ를 사용해야 한다고 명시되어 있습니다.LAlchemy(특히 이점을 이해하지 못하는 경우):

[...] 플라스크-SQ와 같은 제품LAlchemy [...] SQLlchemy에서는 이러한 제품을 사용할 것을 강력히 권장합니다.

이 인용문과 자세한 동기는 세션 FAQ의 두 번째 질문에서 확인할 수 있습니다.

@schlamar가 제안하듯이, 플라스크-Sql 연금술은 확실히 좋은 것입니다.저는 단지 거기서 만들어진 요점에 추가적인 맥락을 추가하고 싶습니다.

다른 것보다 하나를 선택한다고 생각하지 마세요.예를 들어 Flask-Sqalchemy를 사용하여 모형을 사용하여 표에서 모든 레코드를 가져오려고 합니다.그것은 매우 간단합니다.

Model.query.all()

많은 간단한 경우에 플라스크-Sqalchemy는 완전히 괜찮을 것입니다.제가 말씀드리고 싶은 추가적인 점은 플라스크-Sqlchemy가 여러분이 원하는 것을 하지 않는다면, SqlAlchemy를 직접 사용할 수 없을 이유가 없다는 것입니다.

from myapp.database import db

num_foo = db.session.query(func.count(OtherModel.id)).filter(is_deleted=False).as_scalar()

db.session.query(Model.id, num_foo.label('num_foo')).order_by('num_foo').all()

보시다시피, 우리는 문제 없이 쉽게 하나에서 다른 하나로 이동할 수 있으며, 두 번째 예에서는 실제로 플라스크-Sqalchemy 정의 모델을 사용하고 있습니다.

여기 일반 sqlalchemy에 비해 플라스크-sqlalchemy가 제공하는 이점의 예가 있습니다.

flask_user를 사용한다고 가정합니다.

flask_user는 사용자 개체의 생성 및 인증을 자동화하므로 데이터베이스에 액세스해야 합니다.클래스 UserManager는 데이터베이스 호출을 추상화하는 "어댑터"라는 항목을 호출하여 이 작업을 수행합니다.UserManager 생성자에서 어댑터를 제공하는 경우 어댑터는 다음 기능을 구현해야 합니다.

class MyAdapter(DBAdapter):
    def get_object(self, ObjectClass, id):
        """ Retrieve one object specified by the primary key 'pk' """
        pass

    def find_all_objects(self, ObjectClass, **kwargs):
         """ Retrieve all objects matching the case sensitive filters in 'kwargs'. """
        pass


    def find_first_object(self, ObjectClass, **kwargs):
        """ Retrieve the first object matching the case sensitive filters in 'kwargs'. """
        pass

    def ifind_first_object(self, ObjectClass, **kwargs):
        """ Retrieve the first object matching the case insensitive filters in 'kwargs'. """
        pass

    def add_object(self, ObjectClass, **kwargs):
        """ Add an object of class 'ObjectClass' with fields and values specified in '**kwargs'. """
        pass

    def update_object(self, object, **kwargs):
        """ Update object 'object' with the fields and values specified in '**kwargs'. """
        pass

    def delete_object(self, object):
        """ Delete object 'object'. """
        pass

    def commit(self):
        pass

플라스크-sqlalchemy를 사용하는 경우 기본 제공 SQLchemyAdapter를 사용할 수 있습니다.sqlalchemy(not-flask-sqlalchemy)를 사용하는 경우 테이블 이름과 같이 개체가 데이터베이스에 저장되는 방식에 대해 다른 가정을 할 수 있으므로 어댑터 클래스를 직접 작성해야 합니다.

언급URL : https://stackoverflow.com/questions/14343740/flask-sqlalchemy-or-sqlalchemy

반응형