数据库的学习笔记

数据库的学习笔记

web程序最常用基于关系行的数据库(SQL数据库),因为使用的是结构话语言,数据库还有其他类型,文档数据库、键值对数据库最近也比较流行(NoSQL数据库)。

1. 关系型数据库把数据存储在表中,用表来模拟程序中不同的实体。

2. SQL数据库很大程度避免了重复,NoSQL数据库可提升查询的速度(对于大型程序来说)。

3 . 数据库的安装,这里是Flask-SQLAlchemy。

pip install flask-sqlalchemy

4. Flask-SQLAlchemy要求每个模型都要定义主键,并经常命名成id。

5. 创建表

python file.py shell
>>> from file import db
>>> db.create_all

6. 插入行

>>> from file import Role, User
>>> admin_role = Role(name='Admin')
>>> mod_role = Role(name='Moderator')
>>> user_role = Role(name='User')
>>> user_john = User(username='john', role=admin_role)
>>> user_susan = User(username='susan', role=user_role)
>>> user_david = User(username='david', role=user_role)
创建了一些角色和用户,未写入数据库。

>>> db.session.add(admin_role)
>>> db.session.add(mod_role)
>>> db.session.add(user_role)
>>> db.session.add(user_john)
>>> db.session.add(user_susan)
>>> db.session.add(user_david)
准备把对象写入数据库之前,先将其添加到会话中,也可以换种写法:

>>> db.session.add_all([admin_role, mod_role, user_role, user_john, user_susan, user_david])

下面调用commit()方法提交会话
>>> db.session.commit()

可以检验是否将数据写入数据库
>>> print(admin_role.id)
>>> print(mod_role.id)
>>> print(user_role.id)

7. 修改行

>>> admin_role.name = 'Administrator'
>>> db.session.add(admin_role)
>>> db.session.commit()

8. 删除行

>>> db.session.delete(mod_role)
>>> db.session.commit()

9. 查询行

>>> Role.query.all()
[<Role u'Administrator'>,<Role u'User'>]
>>> User.query.all()
[<User u'john', <User u 'susan'>, <User u'david'>]


下面是查找角色未'User'的所有用户:
>>> User.query.filter_by(role=user_role).all()
[<User u'susan'>, <User u'david'>]

10. 常用的SQLAlchemy查询过滤器:


过滤器 | 说明
filter() | 把过滤器添加到原查询上,返回一个新查询
filter_by() | 把等值过滤器添加到原查询上,返回一个新查询
limit() | 使用制定的值限制原查询返回值的数量,返回一个新查询
offset() | 偏移原查询返回的结果,返回一个新查询
order_by() | 根据指定条件对原查询结果进行排序,返回一个新查询
group_by() | 根据指定条件对原查询结果进行分析分组,返回一个新查询

11. 最常使用的SQLAlchemy查询执行函数


方法 | 说明
all() | 以列表形式返回查询的所有结果
first() | 返回查询的第一个结果,如果没有结果,则返回None
first_or_404() | 返回查询的第一个结果,如果没有结果,则终止请求,返回404错误响应
get() | 返回指定主键对应的行,如果没有对应的行,则返回None
get_or_404() | 返回指定主键对应的行,如果没有找到指定的主键,则终止请求,返回404错误响应
count() | 返回查询结果的数量
paginate() | 返回一个Paginate对象,它包含指定范围内的结果

12. 每次启动shell会话都要导入数据库实例和模型,为了避免这一个繁琐工作,可以为shell注册一个make_context回调函数:

from flask.ext.script import Shell

def make_shell_context():
    return dict(app=app,db=db,User=User, Role=Role)
manger.add_command("shell", Shell(make_context=make_shell_context))

我们可以自己试一下:
python file.py shell
>>> app
<Flask 'app'>
>>> db
<SQLAlchemy engine='sqlite:home/flask/flasky/data.sqlite'>
>>> User
<class 'app.User'>

13. 创建迁移仓库,以便进行数据库更新。

 首先要安装Flask_Migrate:
pip install flask-migrate
然后要初始化这个扩展:
from flask.ext.migrate import Migrate, MigrateCommand

#.....

migrate = Migrate(app, db)
manager.add_command('db', MigrateCommand)

初始化完成后,在维护数据库迁移之前,要使用init子命令创建迁移仓库:

python hello.py db init
会看到创建了一个文件夹,其中存放这迁移脚本。

14. 自动创建的迁移库不一定总是正确的,自动生成迁移库时要检查,也可以用migrate子命令来自动创建迁移脚本:

python file.py db migrate -m "initial migration"

15. 检查修正好迁移脚本后,要把迁移库应用到数据库中:

python file.py db upgrade
先写到这,如有问题,请留言!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值