You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

初始化Newrelic代理后调用Psycopg的register_type()遇类型错误

解决NewRelic代理初始化后Psycopg2 register_type()报TypeError的问题

初始化NewRelic代理后,调用Psycopg2的register_type()函数时会触发以下错误:

TypeError: argument 2 must be a connection, cursor or None

问题原因

运行时的游标被NewRelic的newrelic.hooks.database_psycopg2.CursorWrapper类包装,register_type()无法识别这个包装后的对象,因此抛出类型错误。

解决方案

有两种可行的解决办法:

  • 方法一:获取原始游标对象
    CursorWrapper内部持有原始的游标实例,通常可以通过_nr_cursor属性访问(注意不同NewRelic版本可能属性名有变化),将原始游标传入register_type()即可:

    import psycopg2
    from psycopg2.extensions import register_type, UNICODE
    
    # 假设cursor是被NewRelic包装后的对象
    raw_cursor = cursor._nr_cursor
    register_type(UNICODE, raw_cursor)
    
  • 方法二:使用数据库连接对象代替游标
    register_type()的第二个参数支持传入数据库连接对象,这样会将类型注册应用到该连接下的所有游标,无需处理包装后的游标:

    import psycopg2
    from psycopg2.extensions import register_type, UNICODE
    
    conn = psycopg2.connect(database="your_db", user="user", password="pass", host="host")
    register_type(UNICODE, conn)
    

内容的提问来源于stack exchange,提问作者Alexander

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 18:54:54