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、