9. 数据库基本操作

原创 2015年07月08日 11:23:59

介绍几种常用的数据库操作,操练直接在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实现数据库迁移等内容。

数据结构实践——B-树的基本操作

本文是针对[数据结构基础系列(8):查找]的实践。【项目 - B-树的基本操作】 实现B-树的基本操作。基于序列{4, 9, 0, 1, 8, 6, 3, 5, 2, 7}完成测试。 (1)创建对...
  • sxhelijian
  • sxhelijian
  • 2015年11月29日 16:13
  • 2392

数据库的基本SQL操作(增删改查)

1、为表添加主键alter table add primary key(col);主键添加前:主键添加后:2、插入数据insert into (field1,field2,field3..) va...
  • yuanmxiang
  • yuanmxiang
  • 2016年06月15日 17:08
  • 3311

Hibernate(二)实现数据库的基本操作及相关api

配置过程省略。 数据库连接的公共类HibernateUtils.java package test.hibernate.dao; import org.hibernate.Session; impo...
  • u011731233
  • u011731233
  • 2015年07月13日 09:34
  • 1096

办公自动化实训(高职高专)——任务9 PowerPoint 2003基本操作

  • 2010年03月29日 11:15
  • 43KB
  • 下载

Android数据库SQLite基本操作工程

  • 2015年12月10日 15:18
  • 1.38MB
  • 下载

Android数据库基本操作源码

  • 2013年10月10日 18:48
  • 1.15MB
  • 下载

mshflexgrid+access 数据库的基本操作

  • 2015年09月18日 14:57
  • 164KB
  • 下载

数据库基本操作代码报告

  • 2008年12月27日 11:28
  • 58KB
  • 下载

VC连接数据库及基本操作

  • 2014年05月18日 12:15
  • 2.85MB
  • 下载

php+mvc+mongodb数据库基本操作

  • 2011年04月26日 10:50
  • 13.16MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:9. 数据库基本操作
举报原因:
原因补充:

(最多只允许输入30个字)