数据库的学习笔记
来源:互联网 发布:淘宝宝贝图片宽度 编辑:程序博客网 时间:2024/06/07 01:14
数据库的学习笔记
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 Shelldef 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
- 数据库的学习笔记
- 学习笔记:数据库的IDENTITY
- sqlite数据库的学习笔记
- Unity数据库的学习笔记
- 数据库学习笔记-数据库的四大特性
- 数据库的事务的特性 ---- 学习笔记
- 学习笔记——数据库的创建
- android学习笔记---SQLite数据库的使用
- 一篇不错的Oracle数据库学习笔记
- MemSQL学习笔记-类似MySQL的数据库
- oracle11g数据库的管理 学习笔记
- 包子的 oracle 学习笔记---创建数据库
- 非关系型数据库的学习笔记
- Qt学习笔记之数据库的连接
- Qt学习笔记之数据库的访问
- Android数据库框架ORMLite的学习笔记
- 学习笔记:SQLite数据库索引的使用
- Oracle学习笔记 --- 数据库的字段类型
- 自定义Android动画---深入理解matrix
- Smack-Android客户端入门一
- Fragment生命周期
- http://www.cnblogs.com/EricaMIN1987_IT/p/3837436.html
- KindEditor的使用和注意事项
- 数据库的学习笔记
- 排序算法的思考和总结(一)-冒泡和选择排序
- Java 多线程卖票
- Maven报错: Could not resolve archetype org.apache.maven.archetypes:maven-archetype-webapp
- Moto Z Force拍照性能得到87分,DxOMark惹争议
- php 编写一个简单的模板引擎
- 设置套接字选项值setsockopt()函数使用详解
- 远程重启服务器
- python 正则表达式 之re.findall