flask-sqlalchemy数据库模块

It aims to simplify using SQLAlchemy with Flask by providing useful
defaults and extra helpers that make it easier to accomplish common
tasks. (官网原文)
flask-sqlalchemy 在 sqlalchemy 的基础上,提供了一些常用的工具,并预设了一些默认值,帮助你更轻松地完成常见任务。
flask-sqlalchemy 用起来比直接用 sqlalchemy 方便、省事,不过有些高级一点的功能如果不了解 sqlalchemy 的话会用不好。
所以个人建议最好先直接用 sqlalchemy 工作一小段时间,感受一下 sqlalchemy 到底是怎样运行起来的。等有了一定了解后,如果觉得有必要,再改用 flask-sqlalchemy,提高编程效率。

from flask import Flask, render_template, request, redirect
# 1.导入SQLAlchemy
from flask_sqlalchemy import SQLAlchemy
import os, datetime

app = Flask(__name__)
# 1.数据库路径
basedir = os.path.abspath(os.path.dirname(__file__))
# 2.实例化数据库连接
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'blog.sqlite')
# 3. 每次请求结束后,都会提交数据库的变动
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
# 4.创建 SQLAlchemy对象
db = SQLAlchemy(app)


# 5.文章类
class Article(db.Model):
    __tablename__ = 'article'
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(32))  # 标题
    picture = db.Column(db.String(32))  # 保存图片的路径
    time = db.Column(db.DATETIME)  # 时间
    description = db.Column(db.TEXT)  # 描述


# 6.同步数据库
db.create_all()


@app.route('/')
def index():
    return render_template('index.html')


@app.route('/article_list/')
def article_list():
    # 1.获取数据
    article_list = Article.query.all()  # 获取所有
    print(article_list)  # [<Article 1>]
    print(locals())  # {'article_list': [<Article 1>]} article_list=[...]
    # 2.传递到前端

    return render_template('newslistpic.html', **locals())  # 关键字传参


@app.route('/add_article/', methods=['GET', 'POST'])
def add_article():
    if request.method == 'POST':
        # 1.获取表单提交过来的数据
        form_data = request.form
        file_data = request.files
        title = form_data.get('title')
        description = form_data.get('description')
        time = datetime.datetime.now()
        picture = file_data.get('picture')
        # 2.保存数据库
        article = Article(
            title=title,
            description=description,
            time=time,
            picture='/static/img/' + picture.filename  # 图片名称 例如1.png,2.jpg
        )
        # 3.保存上传图片
        picture.save('static/img/' + picture.filename)
        # 4.保存到数据库
        session = db.session
        session.add(article)
        return redirect('/article_list/')
    return render_template('add_article.html')


if __name__ == '__main__':
    app.run()

猜你喜欢

转载自blog.csdn.net/HobbitX/article/details/88354543