原因:

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

解决办法:

在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. hdu 4778 Gems Fight!

    第一次写状压dp-- 题意:http://blog.csdn.net/dyx404514/article/details/15506601 状压dp+博弈吧-- #include<iostrea ...

  2. c# Winform实现中国省份地图

    1.利用raphael.js IE下的VML和SVG实现矢量地图 2.JS调用c# Winform代码,代码 [System.Runtime.InteropServices.ComVisibleAtt ...

  3. Codeforces Round #233 (Div. 2)D. Painting The Wall 概率DP

                                                                                   D. Painting The Wall ...

  4. 【bzoj2654]】tree

    给白色边都加上一个值,二分这个值,使得选取的白边数量减少 #include<algorithm> #include<iostream> #include<cstdlib& ...

  5. Error Handling Functions(微软对于出错的情况下提供的所有函数,比如SetThreadErrorMode,SetErrorMode,SetLastErrorEx,FatalAppExit,CaptureStackbackTrace)

    The following functions are used with error handling. Function Description Beep Generates simple ton ...

  6. libjpeg交叉编译

    下载libjpeg http://libjpeg.sourceforge.net/ 解压tar -zxf jpegsrc.v6b.tar.gz cd jpeg-6b cp /usr/bin/libto ...

  7. 关于Time Series Database

    今天观察了下clojure之父datomic.com的数据库 有点类似sequence数据库的变种 不过这类数据库,感觉用在移动端会更有市场: 1. 移动端需要这种可以本地存储,无删除,联网只增加,只 ...

  8. 洛谷P1155 双栈排序——思路题

    题目:https://www.luogu.org/problemnew/show/P1155 思路... 看博客:https://www.cnblogs.com/Narh/p/9213825.html ...

  9. IOS程序运行过程

    IOS程序是从main开始运行的,main.m文件内容如下: #import <UIKit/UIKit.h> #import "AppDelegate.h" int m ...

  10. Linux查找和替换目录下所有文件中字符串(转载)

    转自:http://rubyer.me/blog/1613/ 单个文件中查找替换很简单,就不说了.文件夹下所有文件中字符串的查找替换就要记忆了,最近部署几十台linux服务器,记录下总结. 查找文件夹 ...