flask 操作数据库flask-sqlarchemy

2019-07-07 15:14:33 浏览数 (1)

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:123456@192.168.126.172/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 '<Role %r>' % 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 '<User %r>' % 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()

修改也是add

删除delete

查询

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、

0 人点赞