美文网首页
Flask开发-数据库开发的学习

Flask开发-数据库开发的学习

作者: 剁椒鸡蛋zy | 来源:发表于2018-06-26 10:04 被阅读0次

Flask开发-数据库开发的学习

SQLAlchemy 是python 的数据库开发工具包,提供了数据库和开发者之间的桥梁,方便开发, 对应到 flask 开发 又有 flask-sqlalchemy库,提供了方便在 flask 开发使用的 接口.

要点

连接数据库

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)

其中SQLALCHEMY_DATABASE_URI 表示的数据库连接地址.
db 就是数据库对象,以后的增删查改都是操作这个对象

如何创建数据表,字段

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    email = db.Column(db.String(120), unique=True)

看到 要继承db.Model primary_key主键

如何建立表之间的关系 1对1 1对多, 多对多

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(80))
    category_id = db.Column(db.Integer, db.ForeignKey('category.id'))
    category = db.relationship('Category',
        backref=db.backref('posts', lazy='dynamic'))

class Category(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))

看到上面的两个类 .之间建立的 1对多关系. 关键的就是使用db.relationship建立关系, backref 相当于在 Category 里面添加 posts 属性. dynaminc 表示查询的时候返回一个查询对象,方便过滤处理.

要是想要一对一关系 ,要添加 uselist=False

多对多关系

tags = db.Table('tags',
    db.Column('tag_id', db.Integer, db.ForeignKey('tag.id')),
    db.Column('page_id', db.Integer, db.ForeignKey('page.id'))
)

class Page(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    tags = db.relationship('Tag', secondary=tags,
        backref=db.backref('pages', lazy='dynamic'))

class Tag(db.Model):
    id = db.Column(db.Integer, primary_key=True)

如何查询数据

db.Model 有一个 query 属性返回查询对象. 然后调用all()``first

User.query.all()
User.query.filter_by(username='peter').first()
User.query.filter(User.email.endswith('@example.com')).all()
User.query.order_by(User.username)
User.query.limit(1).all()
User.query.get(1) 1表示主键
User.query.filter_by(username=username).first_or_404()

如何测试数据库连接

安装 flask-script

pipenv install flask-script

新建一个 db_test.py文件

from flask-script import Manager

app = Flask(__name__)
db = SQLAlchemy(app)
db.create_all()
manager = Manager(app)

if __name__== "__main__":
       manager.run()

然后python db_test.py shell 进入 shell 交互环境

>>> from yourapplication import db
>>> db.create_all()

看看打印结果查看时候成功

相关文章

网友评论

      本文标题:Flask开发-数据库开发的学习

      本文链接:https://www.haomeiwen.com/subject/mqjpyftx.html