关闭

9. 数据库基本操作

标签: pythonFlaskSQLAlchemy数据库操作
814人阅读 评论(0) 收藏 举报
分类:

介绍几种常用的数据库操作,操练直接在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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:19226次
    • 积分:341
    • 等级:
    • 排名:千里之外
    • 原创:12篇
    • 转载:0篇
    • 译文:0篇
    • 评论:5条
    文章分类
    最新评论