Flask-FileAlchemy
เป็นส่วนขยายของขวดที่ให้คุณใช้ไฟล์ข้อความธรรมดาหรือ YAML ที่จัดรูปแบบเป็นไฟล์ข้อมูลหลักเป็นที่เก็บข้อมูลหลักสำหรับแอพของคุณ
$ pip install flask-filealchemy
ข้อ จำกัด ที่ร้านขายข้อมูลจะใช้สำหรับแอปพลิเคชันที่ต้องใช้งานในท้องถิ่นนั้นค่อนข้างผ่อนคลายเมื่อเทียบกับที่ต้องให้บริการการรับส่งข้อมูล สำหรับแอพพลิเคชั่นดังกล่าวโดยปกติแล้วการเสียสละเพื่อประสิทธิภาพเพื่อความสะดวกในการใช้งาน
กรณีการใช้งานที่แข็งแกร่งมากที่นี่คือการสร้างไซต์คงที่ ในขณะที่คุณสามารถใช้ Frozen-Flask เพื่อ "แช่แข็ง" แอปพลิเคชันขวดทั้งหมดในชุดไฟล์ HTML แอปพลิเคชันของคุณยังคงต้องอ่านข้อมูลจากที่ไหนสักแห่ง ซึ่งหมายความว่าคุณจะต้องตั้งค่าที่เก็บข้อมูลซึ่ง (ในพื้นที่) มีแนวโน้มที่จะเป็น SQLite ที่ใช้ไฟล์ ในขณะที่ทำงานได้ดีมาก แต่ก็หมายถึงการดำเนินการคำสั่ง SQL กับข้อมูลอินพุต
ขึ้นอยู่กับจำนวนรูปแบบข้อมูลที่คุณมีและประเภทที่พวกเขามีสิ่งนี้สามารถออกไปได้อย่างรวดเร็ว (ลองนึกภาพว่าต้องเขียนคำสั่ง INSERT
สำหรับโพสต์บล็อก)
นอกจากนี้คุณไม่สามารถควบคุมข้อมูลของคุณได้ ในทางเทคนิคคุณสามารถทำได้ แต่ความแตกต่างจะไม่สมเหตุสมผลกับมนุษย์
Flask -FilealChemy ช่วยให้คุณใช้ที่เก็บข้อมูลทางเลือก - ไฟล์ข้อความธรรมดา
ไฟล์ข้อความธรรมดามีข้อได้เปรียบในการจัดการกับมนุษย์ได้ง่ายขึ้นมาก นอกจากนี้คุณสามารถควบคุมเวอร์ชันได้เพื่อให้ข้อมูลแอปพลิเคชันและรหัสของคุณถูกตรวจสอบด้วยกันและแบ่งปันประวัติ
Flask-FileAlchemy ช่วยให้คุณป้อนข้อมูลของคุณใน markdown หรือ Yaml จัดรูปแบบไฟล์ข้อความธรรมดาและโหลดตามรุ่น SQLALCHEMY ที่คุณกำหนดโดยใช้ Flask-SqlalChemy ข้อมูลนี้จะถูกใส่ลงในข้อมูลที่คุณใช้ (ในหน่วยความจำ SQLite ทำงานได้ดีที่สุด) แล้วพร้อมสำหรับแอปของคุณที่จะสอบถาม แต่ก็พอใจ
สิ่งนี้ช่วยให้คุณรักษาความสะดวกสบายของไซต์แบบไดนามิกโดยไม่ลดทอนความเรียบง่ายของไซต์คงที่
กำหนดโมเดลข้อมูลของคุณโดยใช้ SQLALCHEMY API มาตรฐาน (Flask-) ตัวอย่างเช่นโมเดล 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/
ไดเรกทอรีที่ใดที่หนึ่งบนดิสก์ของคุณ (เพื่อให้สิ่งต่าง ๆ ง่าย ๆ ขอแนะนำให้มีไดเรกทอรีนี้ในรูทแอปพลิเคชัน) สำหรับแต่ละรุ่นที่คุณกำหนดให้สร้างไดเรกทอรีภายใต้ data/
ไดเรกทอรีนี้ด้วยชื่อเดียวกับแอตทริบิวต์ __tablename__
ขณะนี้เราสนับสนุนสามวิธีที่แตกต่างกันในการกำหนดข้อมูล
วิธีแรกคือการมีไฟล์ YAML หลายไฟล์ภายใน data/<__tablename__>/
ไดเรกทอรีแต่ละไฟล์ที่สอดคล้องกับหนึ่งระเบียน
ในกรณีของตัวอย่าง "บล็อก" เราสามารถกำหนดบันทึก BlogPost
ใหม่โดยการสร้างไฟล์ data/blog_posts/first-post-ever.yml
ด้วยเนื้อหาต่อไปนี้
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!
นอกจากนี้ยังเป็นไปได้ที่จะโหลดข้อมูลจากไฟล์ Markdown สไตล์ Jekyll ที่มีเมตาดาต้า frontmatter
ในกรณีที่ตัวอย่างบล็อกเป็นไปได้ที่จะสร้างบันทึก BlogPost
ใหม่โดยกำหนดไฟล์ data/blog_posts/first-post-ever.md
ด้วยเนื้อหาต่อไปนี้
---
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 clone ที่เก็บ - git clone https://github.com/siddhantgoel/flask-filealchemy
ติดตั้งแพ็คเกจที่จำเป็นสำหรับการพัฒนา - poetry install
โดยทั่วไปแล้ว ตอนนี้คุณควรจะสามารถเรียกใช้ชุดทดสอบ - poetry run pytest