python - 如何将 numpy NaN 对象转换为 SQL 空值?

标签 python postgresql psycopg2

我有一个要插入到 SQL 数据库中的 Pandas 数据框。我直接使用 Psycopg2 与数据库对话,而不是 SQLAlchemy,所以我不能使用 Pandas 内置的 to_sql 函数。几乎一切都按预期工作,除了 numpy np.NaN 值被转换为 NaN 文本并插入到数据库中。它们确实应该被视为 SQL 空值。

所以,我正在尝试创建一个自定义适配器以将 np.NaN 转换为 SQL null,但我尝试过的所有操作都会导致在数据库中插入相同的 NaN 字符串。

我目前正在尝试的代码是:

def adapt_nans(null):
    a = adapt(None).getquoted()
    return AsIs(a)

register_adapter(np.NaN, adapt_nans)

我已经尝试了很多关于这个主题的变体,但没有任何运气。

最佳答案

我之前尝试的代码失败了,因为它假定 np.Nan 是它自己的类型,而实际上它是一个 float 。以下代码,courtesy of Daniele Varrazzo on the psycopg2 mailing list , 正确完成工作。

def nan_to_null(f,
        _NULL=psycopg2.extensions.AsIs('NULL'),
        _Float=psycopg2.extensions.Float):
    if not np.isnan(f):
        return _Float(f)
    return _NULL

 psycopg2.extensions.register_adapter(float, nan_to_null)

关于python - 如何将 numpy NaN 对象转换为 SQL 空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32107558/

相关文章:

python - 检测是否从 psycopg2 游标中获取?

python - 我如何使用 Psycopg2 的 LoggingConnection?

sql - 更新 SELECT 输出的行的列

Python:使用 NaN 对数组进行排序

python - 性感:如何在 HTTP POST 中验证来自 json 数据的非字符串值

python - 如何将未引用的 Python 函数/lambda 转换为 AST? 2.6

php - Zend 中缓慢的 Postgres 查询

sql - 如何对自定义类型设置非空约束?

django - 在 python/django 中的线程之间共享事务范围? (PostgreSQL)

python - 使用 docker 时运行 postgres 容器