import sqlalchemy
from sqlalchemy.ext.declarative import declarative_base
# 类似于 pymysql中的游标
from sqlalchemy.orm import sessionmaker
# 1.创建连接
# 数据库类型:// 用户名:密码@主机地址/你要操作的数据库
# mysql://scott:tiger@hostname/dbname
db = sqlalchemy.create_engine('mysql://root:123123@localhost/sqlorm')
# 2.创建基类
base = declarative_base(db)
# 3.创建类 必须继承基类 创建模型
class User(base):
__tablename__='user'
id = sqlalchemy.Column(sqlalchemy.Integer,primary_key=True)
name = sqlalchemy.Column(sqlalchemy.String(32)) # varchar()
age = sqlalchemy.Column(sqlalchemy.Integer)
class Userinfo(base):
__tablename__='userinfo'
id = sqlalchemy.Column(sqlalchemy.Integer,primary_key=True)
phone = sqlalchemy.Column(sqlalchemy.String(20))
class Shop(base):
__tablename__='shop'
id = sqlalchemy.Column(sqlalchemy.Integer,primary_key=True)
name = sqlalchemy.Column(sqlalchemy.String(32))
# User(name='world',age=1),
# User(name='python',age=28),
# User(name='PHP', age=30),
# session.commit()
# 查询所有的数据 返回一个列表
# res = session.query(User).all()
# for i in res:
# print(i.name,i.age)
# 通过主键查询一条数据 返回一个对象
# res = session.query(User).get(1)
# print(res.name,res.age)
# 条件查询 返回的是一个列表
# res = session.query(User).filter_by(name='hello').all()
# print(res)
# res = session.query(User).filter(User.name=='hello').all()
# print(res)
# 修改数据
# res = session.query(User).get(1)
# print(res.name)
# res.name='HELLO'
# session.commit()
# 删除数据
res = session.query(User).get(1)
session.delete(res)
session.commit()
一、视图 view1.定义:当查询的复杂度很高时,指多字段,多关系查询,会导致sql语句混乱,不利于sql语句的编写和编写的sql语句的可读性,引入了视图视图是一张虚拟的表,有字段和数据,只存放查询语句视图有字段有行,但是视图基于源表2.特点:视图的优点1.简单:视图构建了一个虚拟的表,表里的数据是来源于复杂的查询语句,我们将复杂的查询语句存入视图,使用是直接调用视图2.安全...
db_mysql:Search_MySql()数据查询类
httprequests:HttpRequest()请求类
conftest:pytest的setup和teardown机制
test_cmm_apiassert:Test_Costom()测试用例
read_data:readExcel()读excel
1、配置文件方法封装,配置数据分离
2、单独封装请求类:请求不需区分get or post 接口类型
3、多种读取excel方法封装(单列读取,全部读取,根据用例名称读取)
4、pytest的setup和teardown机制使用
5、测试结果回写excel
6、allure报告上传青云对象存储
7、日志写入log.txt
8、测试结果与数据库对比验证
9、丰富的断言库和模拟数据库的使用
def main():
# 创建connection连接
con = connect(host='127.0.0.1', port=3306, user='root', password='1213556247', database='jing_dong',
charset='utf8')
# 获取C.
form = NameForm()
if form.validate_on_submit():
user = User.query.filter(username=form.name.data).first()
if user is None:
user = User(username=
1,为什么需要创建mysql触发器?
比如说我往tb1表里面插入一条数据的时候,同时需要往日志表tb2中插入这条数据,这时候就需要创造一个触发器当我们往tb1中插入一条数据的时候,系统自动往tb2中插入一条数据。
2,创建触发器:(查询没有触发器)
3,更改终结符,比如将终结符';'改为'//':delimiter ...
以非字母 [^a-zA-Z]
以多个或零个非字母 [^a-zA-Z]*
以字母开头 ^[a-zA-Z]
以多个或零个}开头 [^}]*
MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你...
为了保证在应用程序、数据库或系统出现错误后,数据库能够被还原,以保证数据库的完整性,所以需要进行回滚。
回滚(rollback)就是在事务提交之前将数据库数据恢复到事务修改之前数据库数据状态。
例如,用户A给用户B转账,在数据库中就需要给A与B的账户信息进行修改(update)操作,而这两条sql语句必须都执行或者都不执行。 例如先执行用户B的修改(update)语句,使用户B的账户金额增加了1...
索引在MySQL中叫做"键",是存储引擎用于快速找到记录的一种数据结构。索引对于良好的性能非常关键。
当表中数据量比较大,索引对于性能的影响比较重要。
索引优化是对查询性能优化最有效的手段,能够将查询性能提高好几个数量级。
索引分类:1、普通索引 2、唯一索引(unique) 3、全文索引(fulltext)
4、单列索引 5、多列索引 6、空间索引
创建索引:
1、 创建表时候创建索引:create table 表名(字段1 类型 约束,字段2 类型 约束,索引修饰符 index 索引名(字段));
触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据时触发执行,它比数据库本身标准的功能有更精细和更复杂的数据控制能力。
.安全性。可以基于数据库的值使用户具有操作数据库的某种权利。
# 可以基于时间限制用户的操作,例如不允许下班后和节假日修改数据库数据。
# 可以基于数据库中的数据限制用户的操作,例如不允许股票的价格的升幅一次超过10%。
审计。可以...
# 使用sqlalchemy连接mysql
engine = create_engine('mysql+pymysql://root:password@localhost:3306/test_db?charset=utf8mb4')