使用flask框架实现对数据库的相关操作的介绍说明

from flask import Flask

from flask_sqlchemy import SQLAlchemy  #操作数据库的扩展包

from flask_script import Manager  # 用命令操作的扩展包

app = Flask(__name__)

#创建对象

db = SQLAlchemy(app)

manager = Manager(app)

一、创建和删除数据库

db.create_all() #创建数据库(表),数据库已经存在时不会再创建

db.drop_all() #删除数据库(表)

#添加命令行的创建数据库命令,通过该装饰器修饰的函数名就是终端命令名

@manger.command

def createall(): #变成了一个终端的命令,在终端中输入python manage.py createall

   db.create_all()

#添加命令行删除数据库的命令

@manger.command

def dropall():

     if prompt_bool('你确定要删除数据库吗?'):

                  db.drop_all()

                  return '数据库已经被删除'

       return '删除库之前要考虑清楚'

二、设计数据模型类

class User(db.Model):

#表名:转换为小写+下划线的形式

 __tablename__ = 'users'  #指定表名

  id = db.Column(db.Integer,primary_key = True)#设置主键

  username = db.Column(db.String(20),unique=True) #作为唯一键

email = db.Column(db.String(60))

三、数据的增删改查

1.增加数据

  #创建数据模型对象

 liming = User(username = 'liming',email='liming@163.com')

 #添加到数据库

db.session.add(liming)

 #提交,进行下面的配置后则可以省略这一步

 db.session.commit()

#配置自动提交

app.config['SQLAICHEMY_COMMIT_ON_TEARDOWN'] = True

#添加多条数据

hong = User(username='hong',email='hong@163.com')

qing = User(username='qing',email='qing@163.com')

db.add_all([hong,qing])

2.查询数据

#根据主键查询

#查询到返回一个对象,没有查到返回None

 u = User.query.get(uid)

 if u:

     return u.username

 return '查询不到'

各种查询操作

- get:根据主键查询
- all:查询所有数据
- first:查询满足条件的第一条
- limit:限制结果集数量
- offset:设置偏移数量
- get_or_404:功能同get,但是找不到时报404
- first_or_404:功能同first,但是找不到时报404
- order_by:排序,可以指定多字段,asc表示升序,desc表示降序
- paginate:分页查询,项目中讲解
- count:统计总数
- filter:指定查询(过滤)条件

-filter条件

- 关系:
  >,__gt__,大于,示例:User.query.filter(User.id>1) 等价于 User.query.filter(User.id.__gt__(1))
  >=,__ge__
  <,__lt__
  <=,__le__
  ==,__eq__
  !=,__ne__

- 范围
  between:filter(User.id.between(1,3))
  in_:    filter(User.id.in_((1,3)))
  notin_:    filter(User.id.notin_((1,3)))

- 内容
  contains:包含指定内容,如:filter(User.username.contain('xiao'))
  startswith:以指定内容开头
  endswith:以指定内容结尾
  like:模糊匹配,如:filter(User.username.like('%abc%'))
  notlike:模糊取反

- 逻辑
  from sqlalchemy import and_, or_, not_
  and_:逻辑与,默认的,
      filter(User.id > 2, User.age > 17) 
      等价于:filter(and_(User.id > 2, User.age > 17))
  or_:逻辑或
  not_:逻辑非

3.修改数据

#根据主键找到对象

  u = User.query.get(uid)

  if u:

       #修改对应的属性

       u.email = 'uu@163.com'

       #不存在专门的更新操作,当添加的对象有id时自动识别为更新操作

       db.session.add(u)

 4.删除数据

  u = User.query.get(uid)

  if u:

     db.session.delete(u)

四、模型设计

常见的字段类型:

类型名               python类型             说明

Integer                int                          32位

SmallInteger        int                         16位

BigInterger           int                         没有限制

Float                    float                       浮点数

String                   str                         变长字符串

Text                      str                       优化后的变长字符串

Boolean                bool                    布尔值

Date                      datetime.date      日期

Time                      datetime.time      时间

DateTime              datetime.datetime 日期时间

Interval                  datetime.timedelta  时间间隔

常见的字段选项

选项                       说明

primary                    是否为主键索引,默认为False

unique                     是否作为唯一索引,默认为Flaser

index                       是否作为普通索引,默认为False

nullable                    是否可以为空,默认为True

default                      设置默认值

五、数据库的迁移

数据库的迁移:在开发中总是会进行数据模型的更改,在已经有了数据库的前提下,此时数据库模型个数据库中的表格不再一致,

将数据模型的改变对应到数据库中的过程。

安装第三方扩展库:pip install flask-migrate

进行相关配置:from flask_migrate import Migrate,MigrateCommand

#创建迁移对象

migrate = Migrate(app,db)

#在命令行下添加迁移命令

manager.add_command('db',MigrateCommand)

在终端中执行:

python manage.py db init #初始化数据库迁移的仓库操作

python manage.py db  migrate #创建迁移脚本

python manage.py db upgrade #执行更新操作

六、mysql更改表和字段的编码方式

1.使用show create table user ;查看表的编码方式

2.使用alter table user default character set utf8;用来更改数据表的编码方式

3.使用alter table user convert to character set utf8;更改字段的编码方式

七、随机选择数据库表中的一条数据

from sqlalchemy.sql.expression import func

gugu = Gegu.query.order_by(func.random()).limit(1).all()#返回的是列表的形式

八、把字符串类型的日期转换成日期形式的日期

datetime.date(*map(int,'2018-11-6'.split('-')))

转换成星期

datetime.date(*map(int,'2018-11-6'.split('-'))).weekday()#日期是从0开始的

日期减一天

datetime.date(*map(int,'2018-11-6'.split('-')))-datetime.timedelta(days=3)

九、在模型中外键以及关系的建立和使用

 

 

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值