flask with sqlalchemy

97 阅读1分钟
#
# flask-marshmallow
# Flask-Migrate
# Flask-SQLAlchemy

from flask import Flask, request
from flask_sqlalchemy import SQLAlchemy
from flask_marshmallow import Marshmallow
from flask_migrate import Migrate

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = '<db_url>'

db = SQLAlchemy(app)
ma = Marshmallow()
ma.init_app(app)
migrate = Migrate(app, db)

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    post_title = db.Column(db.String(120), nullable=False)
    post_content = db.Column(db.Text, nullable=False)
   
   
class Note(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(64), comment="标题", nullable=True)
    content = db.Column(db.String(128), comment="内容", nullable=True)
    href = db.Column(db.String(160), comment="链接", nullable=True)
    desc = db.Column(db.String(128), comment="描述", nullable=True)
    post_id = db.Column(db.Integer, db.ForeignKey('post.id', use_alter=True), nullable=True)
    post = db.relationship('Post', foreign_keys=post_id, backref=db.backref('notes', lazy=True))


class PostSchema(ma.SQLAlchemyAutoSchema):
    class Meta:
        model = Post


class NoteSchema(ma.SQLAlchemyAutoSchema):
    post = ma.Nested(PostSchema)

    class Meta:
        model = Note
        include_fk = True


note_schema = NoteSchema()
notes_schema = NoteSchema(many=True)
post_schema = PostSchema()


@app.route('/note/')
def note_list():
    all_notes = Note.query.all()
    return notes_schema.jsonify(all_notes)


@app.route('/note/', methods=['POST'])
def create_note():
    title = request.json.get('title', '')
    content = request.json.get('content', '')
    note = Note(title=title, content=content)
    db.session.add(note)
    db.session.commit()
    return note_schema.jsonify(note)

# ...

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

flask db init
flask db migrate
flask db upgrade

# Call API for testing