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()
看看打印结果查看时候成功
网友评论