在尝试围绕现有Teradata数据库构建Flask应用程序时,遇到了一个问题,即从该现有数据库定义应用程序要使用的数据库模型。我正在获取sqlalchemy.exc.DatabaseError:(teradata.api.DatabaseError)(9719,“ [[HY000] [Teradata] [ODBC Teradata驱动程序] Teradata DatabaseQVCI功能已禁用。”)。我正在使用Teradata 16.20版,并且在最新版本中似乎禁用了QVCI功能。
我已经能够通过我的flask应用程序同时使用sqlalchemy和pyodbc成功连接到Teradata数据库。因此,问题不在于建立初始连接。我正在努力的地方是围绕我已经能够连接到的现有数据库构建我的flask应用程序。我有一些示例代码,可以根据另一个我希望将我的“ users_table”用作我的烧瓶应用程序的“用户”类的问题来找到。但是,当试图让sqlalchemy检索“ users_table”时,teradata告诉我QVCI功能已被禁用。这是我能够找到导致错误的代码:
#!/usr/bin/python
# -*- mode: python -*-
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
user = 'user_string'
pasw='password_string'
host = 'host_string'
engine = create_engine('teradata://'+ user +':' + pasw + '@'+ host + '/' + '?authentication=LDAP', convert_unicode=True, echo=False)
Base = declarative_base()
Base.metadata.reflect(engine)
from sqlalchemy.orm import relationship, bckref
class Users(Base):
__table__ = Base.metadata.tables['users_table']
if __name__ == '__main__':
from sqlalchemy.orm import scoped_session, sessionmaker, Query
db_session = scoped_session(sessionmaker(bind=engine))
for item in db_session.query(Users.id, Users.name):
print(item)
运行后,我得到sqlalchemy.exc.DatabaseError:(teradata.api.DatabaseError)(9719,“ [[HY000] [Teradata] [ODBC Teradata驱动程序] Teradata DatabaseQVCI功能已禁用。”)。感谢您的提前帮助。
答案 0 :(得分:0)
我对QVCI并不了解,但是从我的一些在线浏览中可以了解到,它是一种数据库级别的功能,您可以启用/禁用它:
http://knowledge.teradata.com/support/general/kcs.nsf/id/KCS018468
检查您的dbscontrol标志,以查看是否有启用它的选项。这是一个可能有用的链接:
https://docs.teradata.com/reader/3v9n8mulIn_WRhsXpj609w/VEc7SwG43uPE51o9QiodPQ
如果您在其中一个部分中看到一个标志并且已被禁用,请尝试将其启用。我认为您需要“修改”然后“写入”到dbscontrol(并可能重新启动DBS),以使更改生效。
更新
另一个选择是将客户端TD驱动程序更新为最新版本。似乎有一些与QVCI相关的错误修复:
https://teradata-docs.s3.amazonaws.com/doc/connectivity/tdnetdp/16.20/help/WhatsNew16000000.html
答案 1 :(得分:0)
QVCI。将您正在使用的Teradata驱动程序(在本例中为ODBC)升级到最新的补丁程序级别,可以忍受这种情况。
您还可以考虑使用teradatasqlalchemy模块和teradatasql方言,它们不需要Teradata ODBC或pyodbc。
答案 2 :(得分:0)
我在使用their docs doing a forced InnoDB Recovery方言进行sqlalchemy时遇到了相同的问题。对我来说,切换到sqlalchemy-teradata就足够了。似乎第一个不再积极开发。第二个由Teradata正式支持,并且正在积极开发中。所以我想无论如何都是这样!