Python ';QVCI功能已禁用';使用现有Teradata数据库定义flask应用程序使用的模型时出错

Python ';QVCI功能已禁用';使用现有Teradata数据库定义flask应用程序使用的模型时出错,python,flask,sqlalchemy,odbc,teradata,Python,Flask,Sqlalchemy,Odbc,Teradata,在尝试围绕现有的Teradata数据库构建flask应用程序时,我遇到了一个问题,即如何从现有数据库定义应用程序要使用的db模型。我正在获取sqlalchemy.exc.DatabaseError:(teradata.api.DatabaseError)(9719,“[HY000][teradata][ODBC teradata Driver]teradata DatabaseQVCI功能已禁用”。)。我使用的是teradata版本16.20,在这个最新版本中QVCI功能似乎已被禁用 我已经能够

在尝试围绕现有的Teradata数据库构建flask应用程序时,我遇到了一个问题,即如何从现有数据库定义应用程序要使用的db模型。我正在获取sqlalchemy.exc.DatabaseError:(teradata.api.DatabaseError)(9719,“[HY000][teradata][ODBC teradata Driver]teradata DatabaseQVCI功能已禁用”。)。我使用的是teradata版本16.20,在这个最新版本中QVCI功能似乎已被禁用

我已经能够通过flask应用程序成功地使用sqlalchemy和pyodbc连接到Teradata数据库。因此,问题不在于建立初始连接。我正在努力围绕我已经能够连接到的现有数据库构建我的flask应用程序。我有一些示例代码,我可以根据另一个问题找到,我希望这个问题将使用我的“users\u table”,并使它可以作为类“users”用于我的flask应用程序。但是,当尝试让sqlalchemy检索“users_表”时,teradata告诉我QVCI功能已被禁用。以下是导致错误的代码:

#/usr/bin/python
#-*-模式:python-*-
从sqlalchemy导入创建引擎
从sqlalchemy.ext.declarative导入声明性基础
user='user\u string'
pasw='password\u字符串'
主机='主机\字符串'
engine=create_engine('teradata://'+user+':'+pasw+'@'+host+'/'+'?身份验证=LDAP',convert_unicode=True,echo=False)
Base=声明性_Base()
Base.metadata.reflect(引擎)
来自sqlalchemy.orm导入关系,bckref
类别用户(基本):
__table\uuu=Base.metadata.tables['users\u table']
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
从sqlalchemy.orm导入作用域_会话、会话生成器、查询
db_会话=作用域_会话(sessionmaker(bind=engine))
对于db_session.query(Users.id,Users.name)中的项:
打印(项目)

运行后,我得到sqlalchemy.exc.DatabaseError:(teradata.api.DatabaseError)(9719,“[HY000][teradata][ODBC teradata Driver]teradata数据库qvci功能被禁用。”)。提前感谢您的帮助。

我对QVCI没有任何具体的了解,但我从一点在线浏览中了解到,这是一项数据库级功能,您可以启用/禁用:

检查dbscontrol标志以查看是否有启用它的选项。以下链接可能会有所帮助:

如果您在其中一个部分中看到一个标志并且该标志被禁用,请尝试启用它。我认为您需要先“修改”,然后“写入”DBS控件(可能还需要重新启动DBS),以使更改生效

更新
另一个选项是将客户端TD驱动程序更新为最新版本。似乎有一些与QVCI相关的错误修复:


我对QVCI没有任何具体的了解,但从我从一点在线浏览中了解到,这是一种数据库级功能,您可以启用/禁用:

检查dbscontrol标志以查看是否有启用它的选项。以下链接可能会有所帮助:

如果您在其中一个部分中看到一个标志并且该标志被禁用,请尝试启用它。我认为您需要先“修改”,然后“写入”DBS控件(可能还需要重新启动DBS),以使更改生效

更新
另一个选项是将客户端TD驱动程序更新为最新版本。似乎有一些与QVCI相关的错误修复:

此时不应启用QVCI。将您正在使用的Teradata驱动程序(在本例中,它似乎是ODBC)升级到最新的补丁级别,该级别可以容忍这种情况

你也可以考虑使用TelaDasqqLalCyy模块和TelADATASQL方言,这不需要TelaSTODBC或PYODBC。将您正在使用的Teradata驱动程序(在本例中,它似乎是ODBC)升级到最新的补丁级别,该级别可以容忍这种情况


你也可以考虑使用TelaDasasqLalChany模块和TelaDaasql方言,它不需要TelaseODBC或PyoDBC。

< P>我使用了SqLalChany的方言来经历同样的问题。对我来说,这已经足够让我改行了。第一种似乎不再积极发展。第二个由Teradata正式支持,正在积极开发中。所以我想这是一条路要走

我在使用sqlalchemy方言时也遇到了同样的问题。对我来说,这已经足够让我改行了。第一种似乎不再积极发展。第二个由Teradata正式支持,正在积极开发中。所以我想这是一条路要走

谢谢你的回复,弗雷德。请允许我分别讨论这些建议:1.)我的理解是,由sqlalchemy创建的连接引擎不需要像上面那样在连接字符串中定义的驱动程序。连接字符串中是否有手动设置驱动程序的参数?2.)因此,我尝试使用TeradassQlAlchemy模块和TeradassQl方言,但是,看起来好像没有实现参数“database”……至少还没有。我应该在问题中提到的是,我希望在连接字符串中设置默认数据库。除非安装了多个Teradata ODBC版本,并且
Teradata:
方言默认为错误版本,否则无需指定驱动程序。但是可以,您可以在连接字符串中附加
驱动程序=\u-dDriverName
。您是正确的,TeradaSQL尚不支持将默认数据库设置为连接字符串的一部分。teradata模块/方言依赖于“OS native”teradata ODBC驱动程序,该驱动程序必须单独安装在c