今天群里有同学发了一个题: 一张表,如图 ? 需要写一个sql ,输出如下结果 ?...对这个表进行一下简单解释,其实就是省市区的关系,放在了同一张表中,level=1表示省, level=2表示市,level=3表示区 code是他们进行关系的一种表现。...code-t1.code)0) OR t2.code-t1.code=0 WHERE t.level=1 这个sql肯定需要left join 连表,...因为需要3个字段,所以连3次表,利用好code直接的关系,但是不要忘记code相等的情况 code间的关系,是省市的前缀是一样的,市区的前缀是一样的,隶属关系就这样判断: 省市:(t1.code-t.code
以上逻辑最差的情况就是需要执行两次SQL,如果数据量不大,则可以忽略消耗时间,但如果是大表,可能消耗就会翻倍。针对这种情况,或许可以考虑使用merge。...一般使用merge都是用来将一个表数据导入另一个表,但他可以对同一个表操作,例如: 需求:RULE_COLLISION表:根据app_name、rule_id和start_time更新collision_count...then insert values (t2.app_name, t2.MODULE, t2.RULE_ID, t2.COLLISION_COUNT, t2.start_time); 通过伪表dual...,实现RULE_COLLISION表的自我更新或插入,这种做法和上面逻辑都是相同的,但这样只会执行一次SQL,如下是执行计划: Execution Plan -------------------...) 0 sorts (disk) 1 rows processed 这里用到的是NESTED LOOPS OUTER,不是HASH JOIN,如果是两表操作是否就不同了
在项目开发中遇到这么一个例子,首先产品表 tb_product ----------------------------- id name 1 手机 2 电脑 3 笔记本 第二张表...parent_product_id 1 1 2 2 1 3 需要新建一个查询,即把表2
1、内连接 有两个表,学生表student,班级表:class 班级表class: ? 学生表student: ?...2、连续两次使用同一张表 有两张表:material原料表,单位表unit: material表: pUnit为采购单位,sUnit为库存单位 ? 单位表unit: ?...在这里,查询material的信息时,我们需要两次关联单位表unit select *from material m INNER JOIN unit u on m.pUnit=u.id INNER...3、自连接,自关联 在做城市表的时候,城市和省份用的自关联,查询出城市且查出该城市所属的省份 表city: ?
.* TO 'powerdns'@'localhost' IDENTIFIED BY 'powerdns'; MariaDB[(none)]> FLUSH PRIVILEGES; 9 创建数据表 MariaDB...systemctl enable pdns.service $ systemctl start pdns.service $ systemctl status pdns.service 查看8081、53两个端口...= 'pdnsadminuser' SQLA_DB_PASSWORD = 'p4ssw0rd' SQLA_DB_HOST = 'localhost' SQLA_DB_NAME = 'powerdnsadmin...+'@'+SQLA_DB_HOST+':'+str(SQLA_DB_PORT)+'/'+SQLA_DB_NAME # 注释sqlite # DATABASE - SQLite # SQLALCHEMY_DATABASE_URI...= 'sqlite:///' + os.path.join(basedir, 'pdns.db') 18 创建表并创建资产文件 (flask)$ export FLASK_APP=.
传给db.ForeignKey()的参数’person_id’表明,这一列的值是person表中行的id值。 添加到person表中的address属性代表这个关系的面向对象视角。...解决办法是添加第三张表。 多对多关系一个典型的例子是文章与标签之间的关系,一篇文章可以有多个标签,一个标签也可以对应多篇文章。...我们把tags和posts表之间的多对多关系转换成它们各自与关联表connections之间的两个一对多关系。 查询这个多对多关系分为两步。...自引用关系 多对多关系在我们的Web应用中可以用来实现用户之间的关注,但是在上面的文章和标签的例子中,关联表连接的是两个明确的实体,而在用户关注其他用户时,都在users表内,只有一个实体。...如果关系中的两侧都在同一个表中,这种关系称为自引用关系。在关注中,关系的左侧是用户实体,称为”关注者”;右侧也是用户实体,称为”被关注者”。
Flask-SQLAlchemy 是一个ORM框架,它组织了数据库表到类的影射。所以我们可以使用管理这些类对象的方式管理数据库。...暂时可以不用管它, 这个是Flask-Security的东西。 表之间的关系我用外键来定义,额,虽然我知道外键的性能不好。开发人员几乎从来不用。...这是SQLAlchemy 处理多对多关系的方式:产生一张中间表。 SQLAlchemy处理表关系的方式就是relationship方法。...3张表加一个roles_users的表。 数据库操作 现在我们有表了,我们想初始化一些数据。 所以我们先看看一些基础的操作。...就是说我们一定要有User和Role这两张表以及包含相应的字段。 这样Flask-Security才能够帮助我们生成权限管理的解决方案。
pymysql://root:123456@127.0.0.1:3306/people',echo=True) engine.connect() 这样我们就算与People数据库建立连接了,接下来我们来建立一张表...key 内部存储在表的 info 字典中 即:info={'bind_key': 'users'} 2.建立数据表并插入值 1).继承"db.Model"类 from flask_sqlalchemy...一对一 只需让两张表都在同等的位置上,属于双向关系。...__name__,self.name) 4).多对多 设置一个关联表来对两个表同时进行管理。...__name__,self.name) 可以看出我们已经创建出了一张关联表,名字就是我们设置的“glb”。
安装 pip3 install flask_admin 简单使用 from flask import Flask from flask_admin import Admin app = Flask(...adminzhong admin = Admin(app) if __name__=="mian": app.run() #访问 #127.0.0.1:5000/admin端口,会得到一个空白的页面 将表模型注册到...admin中 #在将表注册之前应该对app进行配置 SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:@127.0.0.1:3307/py9api?..." SQLALCHEMY_POOL_SIZE = 5 SQLALCHEMY_POOL_TIMEOUT = 30 SQLALCHEMY_POOL_RECYCLE = -1 #导入models文件的中的表模型...from flask_admin.contrib.sqla import ModelView from api.models import Stock,Product,Images,Category,
而用户与文章的之间的这个关系是双向的,所以我们看到上面的两张表中都定义了 relationship。...创建的 articles 表有外键 userid, 在 SQLAlchemy 中可以使用 ForeignKey 设置外键。...一对一关系 在 User 中我们只定义了几个必须的字段, 但通常用户还有很多其他信息,但这些信息可能不是必须填写的,我们可以把它们放到另一张 UserInfo 表中,这样 User 和 UserInfo...多对多关系不能直接定义,需要分解成俩个一对多的关系,为此,需要一张额外的表来协助完成,通常对于这种多对多关系的辅助表不会再去创建一个类,而是使用 sqlalchemy 的 Table 类: # 在原来代码的基础上导入...因此,我们将创建一个使用两张相互关联的表的应用作为例子: from datetime import datetime class Post(db.Model): id = db.Column(
的参数形式为:"表名.字段名" ## 模型类对应的表名由Flask-SQLAlchemy生成,默认为类名称的小写形式,多个单词通过下划线分隔 author_id = db.Column(...self): return '' % self.name # 设置双向属性后,我们既可以通过集合属性操作关系,也可通过标量关系属性操作关系 多对一关系(多个市民都在同一个城市...关联表不存储数据,只用来存储关系两侧模型的外键对应关系 定义关系两侧的关系函数时,需要添加一个secondary参数,值设为关联表的名称 关联表由使用db.Table类定义,传入的第一个参数为关联表的名称...我们在关联表中将多对多的关系分化成了两个一对多的关系 ## 多对多关系,使用关联表(association table),关联表由db.Table定义 ## 关系函数需要设置secondary参数,值为关系表名...相关 http://www.sqlalchemy.org/ https://github.com/sqlalchemy/sqlalchemy https://github.com/mitsuhiko/flask-sqlalchemy
创建一个 flask_alchemy_search.py 文件,编写连接数据库和模型类的代码并运行,创建两个数据表。...三、使用 Flask-SQLAlchemy 进行过滤查询 数据添加完成,注释掉添加数据的代码,(表中有唯一字段,重复添加会报错),然后开始查询数据。 1....上面创建了两张数据表,现在换一张表查询,如查询开头结尾都是 o 字母的手机品牌,运行结果如下: [Phone_name: OPPO] 8. not_ 进行 逻辑非 查询 from sqlalchemy...[Phone_name: IPhone, Phone_name: Mi, Phone_name: HUAWEI] 四、Flask-SQLAlchemy 关系字段和关联查询 在上面创建的两张表中,已经设置了关系字段...'Person', backref='phone', lazy='dynamic') 通过 realtionship 描述了 Phone 和 Person 的关系,这种关系有一对多,多对多等,上面的两张表是一对多的关系
/simple/ flask-sqlalchemy flask就不多说了 $ pip install -i https://pypi.douban.com/simple/ flask pymysql $...import Flask import pymysql from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config...,继承SQLAlchemy的Model类 app.config的两个,一个是连接数据库的,跟平常的SQLAlchemy表示的一样,一个是是否可以跟踪修改,一般是True __tablename__来作为表的名称...Flask from flask_sqlalchemy import SQLAlchemy from _datetime import datetime import pymysql app = Flask...接下来就是userlog表的类Userlog中的user_id的外键是user表中的id,外键通过db.Foreignkey()来建立外键,参数就是对应的表.表头,比如上面参数的user.id 运行创建
/simple/ flask-sqlalchemy flask就不多说了 $ pip install -i https://pypi.douban.com/simple/ flask pymysql $...import Flask import pymysql from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config...,继承SQLAlchemy的Model类 app.config的两个,一个是连接数据库的,跟平常的SQLAlchemy表示的一样,一个是是否可以跟踪修改,一般是True __tablename__='xxx...,上面代码可以看出,比如user表与userlog表(第一个与第二个类),user表中的userlogs表头是要userlog这个表建立联系,那么第一个参数就是对应的类的名称,backref后面跟的是本表的名字...接下来就是userlog表的类Userlog中的user_id的外键是user表中的id,外键通过db.Foreignkey()来建立外键,参数就是对应的表.表头,比如上面参数的user.id 运行创建
1‘;show tables;# 查表 发现有两个表 ?...1';show columns from 1919810931114514;# 1';show columns from words;# 分别查第一张表和第二张表 这里的1919810931114514...要用反引号`括起 (数字串为表名的表操作时要加反引号) ?...在第一张表中发现了flag字段 但是只有words表有回显,然后看了一下大佬的绕过规则 这里通过修改表名 ?...from @sql;EXECUTE sqla;# (char(115,101,108,101,99,116)是把s e l e c t的ascii码转换为字符连接起来,再把后面的拼接起来就成了select
西顾博客 用到的包 flask下有一个叫flask_sqlalchemy的数据库框架,没有安装的可以使用下面的来安装 $ pip install -i https://pypi.douban.com/simple.../ flask-sqlalchemy flask就不多说了 $ pip install -i https://pypi.douban.com/simple/ flask pymysql $ pip install...,继承SQLAlchemy的Model类 app.config的两个,一个是连接数据库的,跟平常的SQLAlchemy表示的一样,一个是是否可以跟踪修改,一般是True __tablename__来作为表的名称...,上面代码可以看出,比如user表与userlog表(第一个与第二个类),user表中的userlogs表头是要userlog这个表建立联系,那么第一个参数就是对应的类的名称,backref后面跟的是本表的名字...接下来就是userlog表的类Userlog中的user_id的外键是user表中的id,外键通过db.Foreignkey()来建立外键,参数就是对应的表.表头,比如上面参数的user.id 运行创建
参数:"外键字段所在表名称"."...外间字段" author_id = db.Column(db.Integer, db.ForeignKey('user.id')) #给模型定义一个属性,可以快速访问到所关联的模型的内容...,必须通过 db.Table 来定义中间表模型 在定义模型时,需要通过 secondary 属性来关联中间表 在添加数据库时,通过 append 方法来关联数据的多对多,flask会在中间表中添加多对多的数据...from flask import Flask import config from flask_sqlalchemy import SQLAlchemy app = Flask(__name__)...app.config.from_object(config) db = SQLAlchemy(app) #因为python是按照从上到下,逐行执行的,所以多对多的中间表定义必须卸载相关联的两个表的前面
ORM关系以及一对多: mysql级别的外键,还不够ORM,必须拿到一个表的外键,然后通过这个外键再去另外一张表中查找,这样太麻烦了。...多对多的关系: 多对多的关系需要通过一张中间表来绑定他们之间的关系。...先把两个需要做多对多的模型定义出来 使用Table定义一个中间表,中间表一般就是包含两个模型的外键字段就可以了,并且让他们两个来作为一个“复合主键”。...多对多相当于是两个多对一,其中的一是中间表 # 定义中间表 article_tag = Table( "article_tag", # 表名 Base.metadata,...sqlalchemy.Table 在使用绑定三张表的时候,要记得加上secondary参数,填写中间表的名称 41.
from flask_admin.contrib.sqla import ModelView class EnvModelView(ModelView): def is_accessible...的ModelView, 重写两个方法来进行权限控制。...接下来我们使用admin.add_view方法将我们的model视图添加进来,分别添加User,Role和Env表,这些表是我们之前就通过Flask-SQLAlchemy创建好的。...是的,你会发现这两个表的视图已经添加我们的admin页面中了。 点进去看一下是这个样子的。 ? 你可以针对每一个表进行增删查改的操作。...的BaseView并提供了两个用expose装饰的方法。
如果为True,允许有空值,如果为False,不允许有空值 default 为这列定义默认值 关系类型 选项 说明 backref 在关系的另一模型中添加反向引用 primary join 明确指定两个模型之间使用的联结条件...gender = db.Column(db.String(64)) # 性别 # 外键 一个射手对应很多英雄 type_id = db.Column(db.Integer, db.ForeignKey...title = db.Column(db.String(128), unique=True) # 名字 category_id = db.Column(db.Integer, db.ForeignKey...', db.Integer, db.ForeignKey('tbl_tag.id')), db.Column('article_id', db.Integer, db.ForeignKey...title = db.Column(db.String(128), unique=True) # 名字 category_id = db.Column(db.Integer, db.ForeignKey
领取专属 10元无门槛券
手把手带您无忧上云