也算是一个避免循环导入的例子吧.
来源:文心一言,但是我稍有修改.
在 Flask 项目中,你可以通过以下步骤来组织代码,以便在 database.py 文件中创建数据库连接,并在 models/post.py 文件中定义模型,然后在 Flask 应用中创建数据库表。
项目结构
假设你的项目结构如下:
my_flask_app/
│
├── app.py
├── database.py
├── models/
│ └── post.py
└── ...
1. 创建 database.py
在 database.py 文件中,我们将创建一个 SQLAlchemy 数据库实例。
# database.py
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
2. 创建 models/post.py
在 models/post.py 文件中,我们将导入 database.py 中的 db 实例,并定义一个 Post 模型。
# models/post.py
from database import db
from datetime import datetime
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100), nullable=False)
content = db.Column(db.Text, nullable=False)
date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
def __repr__(self):
return f"Post('{self.title}', '{self.date_posted}')"
3. 在 app.py 中配置 Flask 应用和数据库
在 app.py 文件中,我们将配置 Flask 应用,创建数据库连接,并应用迁移来创建数据库表。
# app.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from database import db
from models.post import Post
app = Flask(__name__)
# 配置数据库 URI
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db' # 你可以使用其他数据库,比如 MySQL, PostgreSQL 等
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# 初始化数据库实例
db.init_app(app)
@app.route('/')
def home():
posts = Post.query.all()
return f"Home Page<br>{[post.title for post in posts]}"
if __name__ == '__main__':
# 创建所有表
with app.app_context():
db.create_all()
# 运行 Flask 应用
app.run(debug=True)
cmd命令提示符里运行以下命令:
python app.py
现在,你的 Flask 应用应该能够启动,并且会在 site.db 中创建 post 表。访问 http://127.0.0.1:5000/ 将显示主页,尽管目前还没有任何帖子。
这样,你就成功地创建了一个 Flask 项目,其中包含数据库连接、模型定义和数据库表创建逻辑。
发表回复