flask 操作数据库flask-sqlarchemy

from flask import Flask, render_template, session, redirect, url_for, flash
from flask_bootstrap import Bootstrap
from flask_sqlalchemy import SQLAlchemy

app = Flask(name)
bootstrap=Bootstrap(app)
app.config['SECRET_KEY'] = 'hard to guess string'
app.config['SQLALCHEMY_DATABASE_URI'] ='mysql+pymysql://root:[email protected]/test'
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
db = SQLAlchemy(app)

模型

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 '' % self.name

autoincrement=True

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 init(self, id, username):
self.id = id
self.username = username
def repr(self):
return '' % self.username

db.create_all()

user1 = User(id=1,username = "jack")

user2 = User(id=2,username = "bob")

db.session.add_all([user1,user2])

db.session.commit()

results = db.session.query(User).all()

print(results)

db.session.query(User).filter_by(id=2).values('id', 'name' )

db.session.query(User).filter(User.name.endswith('jack')).all() # 获取role表中name_cn字段以管理员结尾的所有内容

user = db.session.query(User).filter_by(id=1).first() # 将role表中id为6的name改为change
user.name = 'change'
db.session.commit()

if name == 'main':
app.run()


3、常用列
db.Integer
SmallInteger
BigInteger
Float
Numeric
String
Text
Unicode
UnicodeText
Boolean
Date
Time
DateTime
Interval 时间间隔
Enum
PickleType
LargeBinary 二进制文件


primary_key
unique
index
nullable
default
4、外键引用
class Role(db.Model):
# ...
users = db.relationship('User', backref='role', lazy='dynamic')
class User(db.Model):
# ...
role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))

relationship中的参数:

backref 在关系的另一个模型中添加反向关系
lazy select,immediate,joined,subquery,noload,dynamic
uselist 是否使用列表
order_by
secondary
secondaryjoin
5、DB操作
db.create_all()
drop_all()

添加

db.session.add()


image.png

修改也是add

image.png

删除delete

image.png

查询

Role.query.all()
User.query.filter_by(role=user_role).all()
user_role = Role.query.filter_by(name='User').first()

filter()
filter_by()
limit()
offset()
order_by()
group_by()


all() 以列表形式返回查询的所有结果
first() 返回查询的第一个结果,如果没有结果,则返回None
first_or_404() 返回查询的第一个结果,如果没有结果,则终止请求,返回404 错误响应
get() 返回指定主键对应的行,如果没有对应的行,则返回None
get_or_404() 返回指定主键对应的行,如果没找到指定的主键,则终止请求,返回404 错误响应
count() 返回查询结果的数量
paginate() 返回一个Paginate 对象,它包含指定范围内的结果
6、


image.png

你可能感兴趣的:(flask 操作数据库flask-sqlarchemy)