sqlalchemy.exc.InvalidRequestError: Entity '<class 'model.TestCase'>' has no property 'project'
原因:
修改表结构,但没有更新数据模型造成的

解决办法:
在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'的更多相关文章
- 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 ...
- sqlalchemy.exc.InvalidRequestError: Table 'run_result' is already defined for this MetaData instance
临时解决办法: 在models文件导入db后,加上如下代码: db.metadata.clear() 但解决问题的根本之处还是在于找到,为何会声明了2次类的定义呢? 解析: table 'roles_ ...
- sqlalchemy.exc.StatementError: (sqlalchemy.exc.InvalidRequestError) Can't reconnect until invalid transaction is rolled back
从这段话获得灵感 重新启动flask shell之后就好了
- Entity Framework Model First下改变数据库脚本的生成方式
在Entity Framework Model First下, 一个非常常见的需求是改变数据库脚本的生成方式.这个应用场景是指,当用户在Designer上单击鼠标右键,然后选择Generate Dat ...
- 创建实体数据模型【Create Entity Data Model】(EF基础系列5)
现在我要来为上面一节末尾给出的数据库(SchoolDB)创建实体数据模型: SchoolDB数据库的脚本我已经写好了,如下: USE master GO IF EXISTS(SELECT * FROM ...
- Entity Framework的核心 – EDM(Entity Data Model) 一
http://blog.csdn.net/wangyongxia921/article/details/42061695 一.EnityFramework EnityFramework的全程是ADO. ...
- EF,ADO.NET Entity Data Model简要的笔记
1. 新建一个项目,添加一个ADO.NET Entity Data Model的文件,此文件会生成所有的数据对象模型,如果是用vs2012生的话,在.Designer.cs里会出现“// Defaul ...
- Create Entity Data Model
http://www.entityframeworktutorial.net/EntityFramework5/create-dbcontext-in-entity-framework5.aspx 官 ...
- sqlalchemy.exc.ProgrammingError: (pymysql.err.ProgrammingError)
在我学习flask建立网站时间碰到了一个棘手的问题,就是在我进行操作日志的更新时间,发现表格建立有点错误,导致表缺失,从而报了下面的错误 sqlalchemy.exc.ProgrammingError ...
随机推荐
- 2016/1/22 1, 1-100 放集合 特定对象移除 2,List集合和Set集合是否可以重复添加
package shuzu; import java.awt.List; import java.util.*; public class ListIterator { public static v ...
- 后台发送http请求通用方法,包括get和post
package com.examsafety.service.sh; import java.io.BufferedReader; import java.io.IOException; import ...
- 00020970-0000-0000-C000-000000000046
00020970-0000-0000-C000-000000000046 System.InvalidCastException: 无法将类型为“Microsoft.Office.Interop.Wo ...
- bzoj1778
高斯消元+矩阵的逆 来自popoqqq大神 求矩阵的逆:把I-T放在左边,P/Q*S放在右边,这样就形成了一个n*2n的矩阵,然后把左边高斯消元,右边就是求完逆的矩阵,其实就是ans,矩阵的逆跟乘法逆 ...
- uva10828
https://vjudge.net/problem/UVA-10828 裸高斯消元... 但是要判无解和无穷解. 当出现一个环时会无解,环上每个点只有一个出边. #include<bits/s ...
- KVPhone,VOS官方的SIP软电话电脑客户端
来自官方,品质纯正.但是可能因为JAVA环境等问题无法安装,可以试试! 下载地址: 解压密码:www.51voip.org
- bzoj 1231: [Usaco2008 Nov]mixup2 混乱的奶牛【状压dp】
设f[i][j]为奶牛选取状态为i,最后一头选的为j,转移直接f[k][(1<<(k-1)|i]+=f[j][i] #include<iostream> #include< ...
- bzoj 1828: [Usaco2010 Mar]balloc 农场分配【贪心+线段树】
长得挺唬人的贪心,按照右端点排序,用最小值线段树的询问判断当前牛是否能放进去,能的话更新线段树,ans++ 来自https://www.cnblogs.com/rausen/p/4529245.htm ...
- 前端javascript 错误 Uncaught SyntaxError: Unexpected token ILLEGAL
前端控制台报Uncaught SyntaxError: Unexpected token ILLEGAL 错误时,就是非法字符错误,首先检查符号是否正确,不要出现中文标点! 然后检查参数之类的类型是否 ...
- 水题 Codeforces Round #105 (Div. 2) B. Escape
题目传送门 /* 水题:这题唯一要注意的是要用double,princess可能在一个小时之内被dragon赶上 */ #include <cstdio> #include <alg ...