9. 数据库基本操作

介绍几种常用的数据库操作,操练直接在Python Shell中进行。
1、创建表

(venv)$ python hello.py shell
>>> from hello import db
>>> db.create_all()

此时查看程序目录,就会发现新建了一个data.sqlite文件。
需要注意的是,如果数据库表已经存在于数据库中,db.create_all()这个操作不会重新创建或者更新这个表。更新现有数据库表的粗暴方式是先删除旧表再创建新的:(这个在Crossin的教程中也提到过,用的是SQLite 3,以后一个会学到更好的解决办法)

>>> db.drop_all()     #删除旧表
>>> db.create_all()     #创建新表

2、插入行
下面这段代码创建了一些角色和用户:

>>> from hello 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)

通过数据库会话(session)管理对数据库所做的改动,在Flask-SQLAlchemy中,会话由db.session表示。准备把对象写入数据库之前,先将其添加到会话中:

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

为了把对象写入数据库,要调用commit()方法提交会话:

>>> db.session.commit()

这时查看角色的id属性,发现它们已经赋值了:

>>> print admin_role.id
1
>>> print mod_role.id
2
>>> print user_role.id
3

3、修改行

>>> admin_role.name = 'Administrator'
>>> db.session.add(admin_role)
>>> db.session.commit()     #提交改动到数据库

直接重写的做法,类似Python字典中的修改某个键值的方法。

4、删除行
用数据库会话中的delete()方法。例如把“Moderator”角色从数据库中删除:

>>> db.session.delete(mod_role)
>>> db.session.commit()      #提交改动到数据库

5、查询行
Flask-SQLAlchemy为每个模型类都提供了query对象。(这句话啥意思==!英文是Flask-SQLAlchemy makes a query object available in each model class.)最基本的模型查询是取回对应表中的所有记录:

>>> Role.query.all()
[<Role u'Admin'>, <Role u'Moderator'>, <Role u'User'>]
>>> User.query.all()
[<User u'leon'>, <User u'kitty'>, <User u'bin'>]

试用过滤器可以配置query对象进行更精确的数据库查询,如 查找角色为“User”的所有用户:

>>> User.query.filter_by(role=user_role).all()
[<User u'bin'>]

Tips:
1、若要查看SQLAlchemy为查询生成的原生SQL查询语句,只需要把query对象(貌似就是User.query这家伙)转换成字符串:

>>> str(User.query.filter_by(role=user_role))
'SELECT users.id AS users_id, users.username AS users_username, 
users.role_id AS users_role_id \nFROM users \nWHERE :param_1 = users.role_id'

2、常用的SQLAlchemy查询过滤器
这里写图片描述
3、最常使用的SQLAlchemy查询执行函数
这里写图片描述
查了一下Paginate对象,没有找到相关的内容,不过发现书后面有介绍分页(Pagination)的内容,就没去深究,后面再学吧。


下一篇中会涉及在视图函数中操作数据库,使用Flask-Migrate实现数据库迁移等内容。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值