【问题标题】:Error connecting to Teradata by Python via teradatasql module || ( failed to follow the required security policy)Python 通过 teradatasql 模块连接到 Teradata 时出错 || (未能遵循所需的安全策略)
【发布时间】:2020-10-17 07:56:49
【问题描述】:

我正在尝试使用 teradatasql 模块通过 python 连接到 Teradata DB。下面是我的简单代码。


    import teradatasql
    import pandas as pd
    
    query="select * from DBC.tablesv sample 10"
    
    with teradatasql.connect(host='<host ip>', user='<username>', password='<password for user>') as connect:
        df = pd.read_sql(query, connect)
    
    print(df.head())

但我在执行时收到如下错误消息。我是数据库编程的初学者。专家的任何帮助将不胜感激。

----------------------------------------------------------------

    Traceback (most recent call last):
      File "/data/home/uk393e/anaconda3-5.2.0/lib/python3.6/site-packages/pandas/io/sql.py", line 1400, in execute
        cur.execute(*args)
      File "/data/home/uk393e/anaconda3-5.2.0/lib/python3.6/site-packages/teradatasql/__init__.py", line 649, in execute
        self.executemany (sOperation, None, ignoreErrors)
      File "/data/home/uk393e/anaconda3-5.2.0/lib/python3.6/site-packages/teradatasql/__init__.py", line 896, in executemany
        raise OperationalError (sErr)
    teradatasql.OperationalError: [Version 17.0.0.2] [Session 91835188] [Teradata Database] [Error 8056] A message was received that failed to follow the required security policy
     at gosqldriver/teradatasql.(*teradataConnection).formatDatabaseError TeradataConnection.go:1138
     at gosqldriver/teradatasql.(*teradataConnection).makeChainedDatabaseError TeradataConnection.go:1154
     at gosqldriver/teradatasql.(*teradataConnection).processErrorParcel TeradataConnection.go:1217
     at gosqldriver/teradatasql.(*TeradataRows).processResponseBundle TeradataRows.go:1716
     at gosqldriver/teradatasql.(*TeradataRows).executeSQLRequest TeradataRows.go:552
     at gosqldriver/teradatasql.newTeradataRows TeradataRows.go:418
     at gosqldriver/teradatasql.(*teradataStatement).QueryContext TeradataStatement.go:122
     at gosqldriver/teradatasql.(*teradataConnection).QueryContext TeradataConnection.go:2083
     at database/sql.ctxDriverQuery ctxutil.go:48

|
|
|
  File "/data/home/uk393e/anaconda3-5.2.0/lib/python3.6/site-packages/teradatasql/__init__.py", line 896, in executemany
    raise OperationalError (sErr)
pandas.io.sql.DatabaseError: Execution failed on sql: select * from DBC.tablesv
[Version 17.0.0.2] [Session 91835188] [Teradata Database] [Error 8056] A message was received that failed to follow the required security policy
 at gosqldriver/teradatasql.(*teradataConnection).formatDatabaseError TeradataConnection.go:1138
 at gosqldriver/teradatasql.(*teradataConnection).makeChainedDatabaseError TeradataConnection.go:1154
 at gosqldriver/teradatasql.(*teradataConnection).processErrorParcel TeradataConnection.go:1217
 at gosqldriver/teradatasql.(*TeradataRows).processResponseBundle TeradataRows.go:1716
 at gosqldriver/teradatasql.(*TeradataRows).executeSQLRequest TeradataRows.go:552
 at gosqldriver/teradatasql.newTeradataRows TeradataRows.go:418
 at gosqldriver/teradatasql.(*teradataStatement).QueryContext TeradataStatement.go:122
 at gosqldriver/teradatasql.(*teradataConnection).QueryContext TeradataConnection.go:2083
 at database/sql.ctxDriverQuery ctxutil.go:48
 at database/sql.(*DB).queryDC.func1 sql.go:1464
 at database/sql.withLock sql.go:3032
 at database/sql.(*DB).queryDC sql.go:1459
 at database/sql.(*Conn).QueryContext sql.go:1701
 at main.goCreateRows goside.go:652
 at main._cgoexpwrap_212fad278f55_goCreateRows _cgo_gotypes.go:357
 at runtime.call64 asm_amd64.s:574
 at runtime.cgocallbackg1 cgocall.go:316
 at runtime.cgocallbackg cgocall.go:194
 at runtime.cgocallback_gofunc asm_amd64.s:826
 at runtime.goexit asm_amd64.s:2361
unable to rollback
------------------------------------------------------------

【问题讨论】:

    标签: python teradata


    【解决方案1】:

    如文档的“限制”部分所述,teradatasql 驱动程序尚未自动识别集中强制加密。在调用connect 方法时,您需要显式添加encryptdata="true" 参数。

    【讨论】:

    • 感谢弗雷德!看起来有帮助。它至少从简单查询中获取结果。您是否知道我们如何将查询存储在单独的文件中并在此脚本中引用这些查询。目前我将 SQL 存储在“查询”变量中,这显然不是大型 SQL 的好选择。
    • SQL 请求必须作为字符串传递。您当然可以将查询存储在单独的文件中,并使用标准 Python 将文件内容读入字符串。
    猜你喜欢
    • 2020-07-13
    • 2018-11-11
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    • 2022-01-04
    • 2016-01-05
    • 2020-11-19
    • 2020-08-12
    相关资源
    最近更新 更多