python数据库框架_Python——Flask框架——数据库

一、数据库框架 Flask-SQLAlchemy

(1)安装: pip install flask-sqlalchemy

(2)Flask-SQLAlchemy数据库URL

数据库引擎

URL

MySQL

mysql://username:password@hostname/database

Postgres

postgresql://username:password@hostname/database

SQLite(Unix)

sqlite:abslute/path/to/database

SQLite(Windows)

sqlite:///c:/absolute/path/tp/database

二、配置数据库

from flask.ext.sqlalchemy importSQLAlchemy

basedir= os.path.abspath(os.path.dirname(__file__)

app= Flask(__name__)

app.config['SQLACHEMY_DATABASE_URI'] = \'sqlite:///' + os.path.join(basedir,'data.sqlite')

app.config['SQLACHEMY_COMMIT_ON_TEARDOWN'] =True

db= SQLAlchemy(app)

三、定义模型

**roles表和user表定义模型Role和User

classRole(db.Model):#数据库中使用的表名

__tablenaame__ = 'roles'id= db.Column(db.Integer, primary_key =True)

name= db.column(db.String(64),unique =True)def __repr__(self):return '% self.name

classUser(db.Model):__tablenaame__ = 'users'id= db.Column(db.Integer, primary_key =True)

username= db.column(db.String(64),unique = True,index =True)def __repr__(self):return '% self.username

(2)最常使用的SQLAlchemy列选项

选项名

说明

primary_key

主键,经常是ID

unique

不允许出现重复的值

index

创建索引,提升查询效率

nullable

允许空值

default

定义默认值

四、关系

(1)一对多关系

classRole(db.Model):#数据库中使用的表名

'''__tablenaame__ = 'roles'

id = db.Column(db.Integer, primary_key =True)

name = db.column(db.String(64),unique = True)'''users= db.relationship('User',backref ='role')'''def __repr__(self):

return ' % self.name'''

classUser(db.Model):'''__tablenaame__ = 'users'

id = db.Column(db.Integer, primary_key =True)

username = db.column(db.String(64),unique = True,index = True)'''role_id= db.Column(db.Integer,db.ForeignKey('role.id'))'''def __repr__(self):

return ' % self.username'''

(2)常用的关系项

选项

说明

backref

在关系的另一个模型中添加反向引用

primaryjoin

明确两个模型中间的连接条件

lazy

指定加载相关记录

uselist

设置Fales,不使用列表

order_by

指定关系中记录的排序方式

secondary

指定多对多关系表的名字

secondaryjoin

无法自行决定时,指定多堆垛关系的耳机连接条件

**lazy可选值select(首次访问时需要加载),immediate(源对象加载后就加载),joined(加载记录,单使用连接),subquery(立即加载,单使用子查询),noload(永不加载)和dynamic(不加载记录,单提供加载记录查询)

**db.relationship(),把uselist设置为False,把“多”变成“一”

五、数据库操作

(1)创建表

from hello importdb

db.create_all()

**创建一个名字为data.sqlite

(2)插入行

db.session.all_all([admin_role,mod_role,user_role,user_john,user_susan,user_david])#提交数据

db.session.commit()

**数据回滚 db.session.rollback()

(3)修改行

#把"Admin" 角色重命名为"Administrator"

admin_role.name = 'Administrator'db.session.add(admin_role)

db.session.commit()

(4)删除行

db.session.delete(mod_role)

db.session.commit()

(5)查询行

5.2常用的查询过滤器

过滤器

说明

filter

把过滤器添加到原查询上,返回一个新查询

filter_by

把等值过滤器添加到原查询上,返回一个新查询

limit

使用指定的值限制原查询返回的结果数量,返回一个查询

offset

偏移原查询返回的结果,返回一个新查询

order_by

根据指定条件对原查询结果进行排序,返回一个新查询

group_by

根据指定条件对原查询结果进行分组,返回一个新查询

5.3常用查询执行函数

方法

说明

all

以列表形式返回查询的所有结果

first

返回查询的第一个结果,没有结果返回None

first_or_404

返回查询的第一个结果,没有结果,返回404错误

get

返回指定主键对应的行,没有结果返回None

get_or_404

返回指定主键对应的行,没有结果,返回404错误

count

返回查询的结果的数量

paginate

返回Paginate对象,它包含指定范围内容的结果

六、在视图函数中操作数据库

七、集成Python shell ?

为shell命令添加一个上下文

defmake_shell_context():return dict(app=app,db=db,User=User,Role=Role)

manager.add_command("shell",Shell(make_context=make_shell_context)

**make_shell_context函数注册了程序,数据库实例以及模型,因此这些对象能直接导入shell

八、数据库迁移(Flask-Migrate)

(1)安装 : pip install flask-migrate

(2)配置Flask-Migrate

form flask.ext.migrate importMigrate,MigrateCommand#...

migrate =Migrate(app,db)

manager.add_command('db',MigrateCommand)

(2)迁移脚本

upgrade()函数把迁移中的改动应用到数据库中

downgrade()函数责将改动删除

自动迁移脚本: python hello.py db migrate -m "initial migration"

九、更新数据库

python hello.py db upgrade

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值