原因:
修改表结构,但没有更新数据模型造成的

解决办法:
在sqlalchemy提供的表模型中增加project字段的描述信息

这次修改测试框架我有点想不起来,在测试代码中,是怎么通过sqlalchemy对数据库进行增删改查的操作来的呢?
这里做一个回顾:
目录结构如图:

表结构的映射关系在demomodel.py进行定义的
#导入sqlalchemy相关模块
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,Text,String,Enum
Base =declarative_base()
#测试用例表
class TestCase(Base):
__tablename__="testcase"
id = Column(Integer,primary_key=True)
api_purpose=Column(String(50))
request_url=Column(String(100))
request_method=Column(Enum("POST","GET"))
request_data_type=Column(Enum("Data","Form","File"))
request_data=Column(Text,nullable=False)
assert_method=Column(Enum("assertIn","assertNotIn In"),default="assertIn")
check_point=Column(String(255))
correlation=Column(String(100))
active=Column(Enum("Yes","No"))
creater = Column(String(50))
project = Column(Enum("gw", "hw"), default="gw")
def __repr__(self):
return "<TestCase.%s>"%self.api_purpose
通过readIni读取 db.ini配置文件中的数据库相关属性。
通过getConnMysql获取readIni函数返回的连接数据库的信息,连接数据库,并返回一个session对象
我们可以通过操作这个session对象对数据库,进行增删改查
配置信息如图:

代连接数据库的代码如下:
1 #读取ini配置文件
2 def readIni(db_path):
3 config=configparser.RawConfigParser()
4 config.read(db_path)
5 confset={}
6 confset["username"]= config.get("databaseTest","username")
7 confset["password"]= config.get("databaseTest","password")
8 confset["url"]= config.get("databaseTest","url")
9 confset["port"]=config.get("databaseTest","port")
10 confset["dbname"]= config.get("databaseTest","dbname")
11 confset["charset"]=config.get("databaseTest","charset")
12 return confset
13
14 # 获取数据库连接
15 def getConnMysql(db_path):
16 confset = readIni(db_path)
17 connStr="mysql+mysqlconnector://{username}:{password}@{url}:{port}/{dbname}?charset={charset}".format(
18 username=confset["username"],
19 password=confset["password"],
20 url = confset["url"],
21 port= confset["port"],
22 dbname=confset["dbname"],
23 charset=confset["charset"]
24 )
25 engine=create_engine(connStr)
26 DBsession = sessionmaker(bind=engine) # 创建DBsession类
27 session= DBsession() # 创建session对象
28
29 return session
今天我犯迷糊主要是搞不清楚这个问题了:
我们怎么通过sqlalchemy与数据库中的表testcase产生关联,进而对testcase进行增删改查呢?答案是:通过model.py中定义的TestCase类与数据库中的表testcase产生关联测试我们已经正确连接到数据库的代码是:
1 from demo.demomodel import TestCase #导入测试环境的模型 2 3 #指定配置文件的位置 4 dirname, filename = os.path.split(os.path.abspath(__file__)) 5 db_path = os.path.join(dirname, "demodb.ini") 6 7 #创建连接数据库对象 8 session=getConnMysql(db_path) 9 10 #利用session和sqlalchemy提供的 session.query方法对TestCase表进行查询(此处通过model.py中定义的TestCase类与数据库中的表testcase产生关联),查询条件是 project = "hw"的所有记录 11 #相当于执行了sql语句:select * from testcase where project="hw" 12 13 testcase = session.query(TestCase).filter_by(project = "hw").all()
运行的结果是:

其它说明:
session.query(TestCase).all()返回的是一个对象的列表,是list类型,数据库的1条记录就是1个对象
这里有关于session的讲解:
当你想打电话给朋友时,你是否得用手机拨通他的号码才能建立起一个会话?同样的,你想和 MySQL 交谈也得先通过 SQLAlchemy 建立一个会话:
from sqlalchemy.orm import sessionmaker Session = sessionmaker(bind=engine) session = Session()
你可以把 sessionmaker 想象成一个手机,engine 当做 MySQL 的号码,拨通这个“号码”我们就创建了一个 Session 类,下面就可以通过这个类的实例与 MySQL 愉快的交谈了!
更多关于sqlalchemy的操作请查看:
https://www.cnblogs.com/mrchige/p/6389588.html
https://www.jianshu.com/p/20593da77c04
来源:https://www.cnblogs.com/kaerxifa/p/11050401.html