python-flaskweb学习笔记二

在 ORM 中,模型一般是一个 Python 类,类中的属性对应数据库表中的列。

最常用的SQLAlchemy列类型

类型名 Python类型

说  明

Integer

 

int

普通整数,一般是 32 位

SmallInteger

 

int

取值范围小的整数,一般是 16 位

BigInteger  

int 或 long 不限制精度的整数

Float

 

float

 浮点数

Numeric

 

decimal.Decimal

 定点数

String

 

str

 变长字符串

Text

 

str

变长字符串,对较长或不限长度的字符串做了优化

Unicode

 

unicode

变长 Unicode 字符串

UnicodeText

 

unicode

变长 Unicode 字符串,对较长或不限长度的字符串做了优化

Boolean

 

bool

布尔值

Date

 

datetime.date

日期

Time

 

datetime.time

时间

DateTime

 

datetime.datetime

日期和时间

Interval

 

datetime.timedelta

时间间隔

Enum

 

str

一组字符串

PickleType

任何 Python 对象 自动使用 Pickle 序列化

LargeBinary

 

str

二进制文件

 

hello.py:定义 Role 和 User 模型

class Role(db.Model):

__tablename__ = 'roles'

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

name = db.Column(db.String(64), unique=True)

def __repr__(self):

return '<Role %r>' % self.name

class User(db.Model):

__tablename__ = 'users'

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

username = db.Column(db.String(64), unique=True, index=True)

def __repr__(self):

return '<User %r>' % self.username

 

最常使用的SQLAlchemy列选项

选项名 说  明

primary_key 如果设为 True ,这列就是表的主键

unique 如果设为 True ,这列不允许出现重复的值

index 如果设为 True ,为这列创建索引,提升查询效率

nullable 如果设为 True ,这列允许使用空值;如果设为 False ,这列不允许使用空值

default 为这列定义默认值

 

常用的SQLAlchemy关系选项

选项名 说  明

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

primaryjoin 明确指定两个模型之间使用的联结条件。只在模棱两可的关系中需要指定

lazy 指定如何加载相关记录。可选值有 select (首次访问时按需加载)、 immediate (源对象加

载后就加载)、 joined (加载记录,但使用联结)、 subquery (立即加载,但使用子查询),

noload (永不加载)和 dynamic (不加载记录,但提供加载记录的查询)

 

hello.py:关系

class Role(db.Model):

# ...

users = db.relationship('User', backref='role')

class User(db.Model):

# ...

role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))

 

SQLAlchemy 为很多数据库引擎提供抽象层

 

数据库

会话也称为事务

 

数据库会话能保证数据库的一致性。提交操作使用原子方式把会话中的对象全部写入数据

库。

 

数据库会话也可 回滚 。调用 db.session.rollback() 后,添加到数据库会话

中的所有对象都会还原到它们在数据库时的状态。

 

常用的SQLAlchemy查询过滤器

过滤器

 说  明

filter()

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

filter_by()

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

limit()

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

offset()

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

order_by()

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

group_by()

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

 

最常使用的SQLAlchemy查询执行函数

方 法

说  明

all()

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

first()

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

first_or_404()

返回查询的第一个结果,如果没有结果,则终止请求,返回 404 错误响应

get()

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

get_or_404()

返回指定主键对应的行,如果没找到指定的主键,则终止请求,返回 404 错误响应

count()

返回查询结果的数量

paginate()

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

 

@app.route('/', methods=['GET', 'POST'])

def index():

form = NameForm()

if form.validate_on_submit():

user = User.query.filter_by(username=form.name.data).first()

if user is None:

user = User(username = form.name.data)

db.session.add(user)

session['known'] = False

else:

session['known'] = True

session['name'] = form.name.data

form.name.data = ''

return redirect(url_for('index'))

return render_template('index.html',

form = form, name = session.get('name'),

known = session.get('known', False))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值