Flask-FileAlchemy
는 Flask 확장으로 Markdown 또는 Yaml 형식의 일반 텍스트 파일을 앱의 기본 데이터 저장소로 사용할 수 있습니다.
$ pip install flask-filealchemy
로컬로만 실행 해야하는 응용 프로그램에 사용할 데이터 스토어가 생산 트래픽을 제공 해야하는 것과 비교할 때 상당히 편안합니다. 이러한 응용 프로그램의 경우 일반적으로 사용 편의성을 위해 성능을 희생하는 것이 좋습니다.
여기서 매우 강력한 사용 사례 중 하나는 정적 사이트를 생성하는 것입니다. Frozen-Flask를 사용하여 전체 플라스크 애플리케이션을 일련의 HTML 파일에 "동결"할 수 있지만 응용 프로그램은 여전히 어딘가에서 데이터를 읽어야합니다. 즉, 파일 기반 SQLITE 인 경향이있는 데이터 저장소를 설정해야합니다. 그것은 작업이 매우 잘 작동하지만 이는 데이터를 입력하기 위해 SQL 문을 실행하는 것을 의미합니다.
가지고있는 데이터 모델 수와 어떤 유형이 포함되어 있는지에 따라 빠르게 손을 떼지 못할 수 있습니다 (블로그 게시물에 INSERT
문을 작성해야한다고 상상해보십시오).
또한 데이터를 제어 할 수 없습니다. 글쎄, 기술적으로 당신은 할 수 있지만, diffs는 인간에게 의미가 없습니다.
Flask -filealchemy를 사용하면 대체 데이터 저장소 인 일반 텍스트 파일을 사용할 수 있습니다.
일반 텍스트 파일은 인간을 쉽게 처리하기가 훨씬 쉽다는 장점이 있습니다. 또한, 응용 프로그램 데이터와 코드가 함께 체크인하고 기록을 공유하도록 버전을 제어 할 수 있습니다.
Flask-filealchemy는 Markdown 또는 Yaml 형식의 일반 텍스트 파일로 데이터를 입력하고 Flask-SqlalChemy를 사용하여 정의한 SQLALCHEMY 모델에 따라로드 할 수 있습니다.이 데이터는 사용하는 모든 데이터 저장소에 넣습니다 (Memory SQLITE. 그런 다음 앱이 쿼리 할 준비가되어 있지만 기뻐합니다.
이를 통해 정적 사이트의 단순성을 손상시키지 않고 동적 사이트의 편안함을 유지할 수 있습니다.
표준 (Flask-) Sqlalchemy API를 사용하여 데이터 모델을 정의하십시오. 예를 들어, BlogPost
모델은 다음과 같이 정의 할 수 있습니다.
app = Flask ( __name__ )
# configure Flask-SQLAlchemy
app . config [ 'SQLALCHEMY_DATABASE_URI' ] = 'sqlite:///:memory:'
db = SQLAlchemy ()
db . init_app ( app )
class BlogPost ( db . Model ):
__tablename__ = 'blog_posts'
slug = Column ( String ( 255 ), primary_key = True )
title = Column ( String ( 255 ), nullable = False )
content = Column ( Text , nullable = False )
다음으로 디스크 어딘가에 data/
디렉토리를 만듭니다 (간단하게 유지하려면 응용 프로그램 루트 에이 디렉토리가있는 것이 좋습니다). 정의한 각 모델에 대해 __tablename__
속성과 동일한 이름 의이 data/
디렉토리에서 디렉토리를 만듭니다.
우리는 현재 데이터를 정의하는 세 가지 방법을 지원합니다.
첫 번째 방법은 data/<__tablename__>/
directory 내에 여러 YAML 파일을 두는 것입니다. 각 파일은 하나의 레코드에 해당합니다.
"블로그"예제의 경우 다음 내용으로 파일 data/blog_posts/first-post-ever.yml
작성하여 새 BlogPost
레코드를 정의 할 수 있습니다.
slug : first-post-ever
title : First post ever!
content : |
This blog post talks about how it's the first post ever!
같은 디렉토리에 이러한 파일을 더 추가하면 더 많은 레코드가 발생합니다.
2-3 개 이상 필드가없는 "작은"모델의 경우 Flask-Filealchemy는 _all.yml
파일의 읽기를 지원합니다. 이 경우 모든 행에 하나의 파일을 추가하는 대신 테이블 디렉토리의 _all.yml
파일에 모든 행을 추가하십시오.
"블로그"예제의 경우, 이것은 다음과 같습니다.
- slug : first-post-ever
title : First post ever!
content : This blog post talks about how it's the first post ever!
- slug : second-post-ever
title : second post ever!
content : This blog post talks about how it's the second post ever!
FrontMatter 메타 데이터가 포함 된 Jekyll 스타일의 Markdown 파일의 데이터를로드 할 수도 있습니다.
블로그 예제의 경우 다음 내용으로 data/blog_posts/first-post-ever.md
파일을 정의하여 새 BlogPost
레코드를 만들 수 있습니다.
---
slug : first-post-ever
title : First post ever!
---
This blog post talks about how it's the first post ever!
Markdown을 사용하여 데이터를 정의 할 때 메인 Markdown 본문과 관련된 열의 이름은 content
이어야 합니다 .
마지막으로, 설정으로 Flask-FileAlchemy
구성하고 모든 데이터를로드하도록 요청하십시오.
# configure Flask-FileAlchemy
app . config [ 'FILEALCHEMY_DATA_DIR' ] = os . path . join (
os . path . dirname ( os . path . realpath ( __file__ )), 'data'
)
app . config [ 'FILEALCHEMY_MODELS' ] = ( BlogPost ,)
# load tables
FileAlchemy ( app , db ). load_tables ()
Flask-FileAlchemy
주어진 디렉토리에서 데이터를 읽고 Flask-FileAlchemy
(선호도가 sqlite:///:memory:
:)을 구성한 선택한 데이터 저장소에 저장합니다.
db.session
사용 하여이 데이터베이스에 쓸 수는 없습니다. 글쎄, 기술적으로 허용되지만 앱 변경은 메모리 내 데이터 저장소에만 반영되지만 디스크에는 지속되지 않습니다.
기부금이 가장 환영합니다!
Python 3.7+와 시가 설치되어 있는지 확인하십시오.
git 복제 저장소 git clone https://github.com/siddhantgoel/flask-filealchemy
.
개발 - poetry install
에 필요한 패키지를 설치하십시오.
그것은 기본적으로 그것입니다. 이제 Test Suite -Poetry poetry run pytest
실행할 수 있어야합니다.