原因:

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

解决办法:

在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对象对数据库,进行增删改查

配置信息如图:

代连接数据库的代码如下:

 #读取ini配置文件
def readIni(db_path):
config=configparser.RawConfigParser()
config.read(db_path)
confset={}
confset["username"]= config.get("databaseTest","username")
confset["password"]= config.get("databaseTest","password")
confset["url"]= config.get("databaseTest","url")
confset["port"]=config.get("databaseTest","port")
confset["dbname"]= config.get("databaseTest","dbname")
confset["charset"]=config.get("databaseTest","charset")
return confset # 获取数据库连接
def getConnMysql(db_path):
confset = readIni(db_path)
connStr="mysql+mysqlconnector://{username}:{password}@{url}:{port}/{dbname}?charset={charset}".format(
username=confset["username"],
password=confset["password"],
url = confset["url"],
port= confset["port"],
dbname=confset["dbname"],
charset=confset["charset"]
)
engine=create_engine(connStr)
DBsession = sessionmaker(bind=engine) # 创建DBsession类
session= DBsession() # 创建session对象 return session

今天我犯迷糊主要是搞不清楚这个问题了:

我们怎么通过sqlalchemy与数据库中的表testcase产生关联,进而对testcase进行增删改查呢?
答案是:通过model.py中定义的TestCase类与数据库中的表testcase产生关联
测试我们已经正确连接到数据库的代码是:
  from demo.demomodel import TestCase #导入测试环境的模型                

  #指定配置文件的位置
dirname, filename = os.path.split(os.path.abspath(__file__))
db_path = os.path.join(dirname, "demodb.ini") #创建连接数据库对象
session=getConnMysql(db_path) #利用session和sqlalchemy提供的 session.query方法对TestCase表进行查询(此处通过model.py中定义的TestCase类与数据库中的表testcase产生关联),查询条件是 project = "hw"的所有记录
#相当于执行了sql语句:select * from testcase where project="hw" 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

sqlalchemy.exc.InvalidRequestError: Entity '<class 'model.TestCase'>' has no property 'project'的更多相关文章

  1. Superset安装出错 sqlalchemy.exc.InvalidRequestError: Can't determine which FROM clause to join from, ...

    $ superset db upgrade ... Traceback (most recent call last): File "/home/jhadmin/.pyenv/version ...

  2. sqlalchemy.exc.InvalidRequestError: Table 'run_result' is already defined for this MetaData instance

    临时解决办法: 在models文件导入db后,加上如下代码: db.metadata.clear() 但解决问题的根本之处还是在于找到,为何会声明了2次类的定义呢? 解析: table 'roles_ ...

  3. sqlalchemy.exc.StatementError: (sqlalchemy.exc.InvalidRequestError) Can't reconnect until invalid transaction is rolled back

    从这段话获得灵感 重新启动flask shell之后就好了

  4. Entity Framework Model First下改变数据库脚本的生成方式

    在Entity Framework Model First下, 一个非常常见的需求是改变数据库脚本的生成方式.这个应用场景是指,当用户在Designer上单击鼠标右键,然后选择Generate Dat ...

  5. 创建实体数据模型【Create Entity Data Model】(EF基础系列5)

    现在我要来为上面一节末尾给出的数据库(SchoolDB)创建实体数据模型: SchoolDB数据库的脚本我已经写好了,如下: USE master GO IF EXISTS(SELECT * FROM ...

  6. Entity Framework的核心 – EDM(Entity Data Model) 一

    http://blog.csdn.net/wangyongxia921/article/details/42061695 一.EnityFramework EnityFramework的全程是ADO. ...

  7. EF,ADO.NET Entity Data Model简要的笔记

    1. 新建一个项目,添加一个ADO.NET Entity Data Model的文件,此文件会生成所有的数据对象模型,如果是用vs2012生的话,在.Designer.cs里会出现“// Defaul ...

  8. Create Entity Data Model

    http://www.entityframeworktutorial.net/EntityFramework5/create-dbcontext-in-entity-framework5.aspx 官 ...

  9. sqlalchemy.exc.ProgrammingError: (pymysql.err.ProgrammingError)

    在我学习flask建立网站时间碰到了一个棘手的问题,就是在我进行操作日志的更新时间,发现表格建立有点错误,导致表缺失,从而报了下面的错误 sqlalchemy.exc.ProgrammingError ...

随机推荐

  1. 怎样托管你的项目到github上具体教程

    本文将具体介绍怎样托管你的项目到github上 转载请标明出处: http://blog.csdn.net/lxk_1993/article/details/50441442 本文出自:[lxk_19 ...

  2. bug统计分析续(一)基于SQL的Bug统计方法

    本文由 @lonelyrains 出品.转载请注明出处. 文章链接: http://blog.csdn.net/lonelyrains/article/details/44225533 上一篇为 bu ...

  3. HDU1236 排名 题解

    Problem Description 今天的上机考试尽管有实时的Ranklist,但上面的排名仅仅是依据完毕的题数排序,没有考虑  每题的分值,所以并非最后的排名.给定录取分数线.请你敲代码找出最后 ...

  4. AVD那些事儿

    启动了AVD却说找不到AVD 错误提示: No active compatible AVD's or devices found. Relaunch this configuration after ...

  5. iOS 特定图片的button的旋转动画

    近期做的东西中,要为一个有特定图片的button加入旋转动画,Demo代码例如以下: #import "ViewController.h" @interface ViewContr ...

  6. 数据结构 - 希尔排序(Shell&#39;s Sort) 具体解释 及 代码(C++)

    数据结构 - 希尔排序(Shell's Sort) 具体解释 及 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy/article/details/2 ...

  7. ubuntu 截图工具 Shutter,设置快捷键 Ctrl+Alt+A

    系统设置 键盘 快捷键 自定义快捷键

  8. luogu 1726 上白泽惠音

    题目大意: 给一个有向图 求一个最大的强连通分量,输出这个强连通分量里的所有元素 若两个联通分量内点数相同 则输出字典序小的那个 思路: 直接tarjan 对每个连通分量,求一下最小点,然后判断字典序 ...

  9. Probabilistic interpretation

    Under the previous probabilistic assumptions on the data, least-squares regression corresponds to fi ...

  10. setsockopt 设置socket 详细用法(转载)

    转自:http://www.cppblog.com/killsound/archive/2009/01/16/72138.html 1.closesocket(一般不会立即关闭而经历TIME_WAIT ...