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: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()


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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • MySQL 命令大全 DDL(数据定义语句) CREATE TABLE/DATABASE ALTER TABLE/...
    子非初心阅读 8,859评论 0 2
  • 常用语句: sql/plus sqlplus 'amdocs/Amdocs.Jx.China.110#@ysdb1...
    好好学习的蜗牛阅读 8,415评论 0 0
  • MySQL&python交互 一、Python操作MySQL步骤(原始的执行SQL语句) 引入pymysql模块 ...
    梦醒家先生阅读 4,066评论 0 0
  • Flask-SQLAlchemy的使用: ORM的好处:可以让我们操作数据库跟操作对象是一样的,非常方便,因为一个...
    Dozing阅读 23,430评论 3 22
  • 你的名 耶和华我们的主啊,你的名在全地何其美。因为你的荣耀彰显于天,万物在你的话里被创造。宇宙浩瀚,日月星宿,你随...
    Happy高兴阅读 3,853评论 0 0