Python 在大容量插入期间将空字符串转换为DB Null

Python 在大容量插入期间将空字符串转换为DB Null,python,postgresql,sqlalchemy,Python,Postgresql,Sqlalchemy,我正在进行大容量插入,其中一些列可以用空字符串'表示,我想将该空字符串转换为Postgresql DB Null值 如果我使用的是psycopg2的copy\u from,它很简单,我会有这样的东西: copy_from(类似文件的对象,表,sep='|',null='',size=8192,columns=None) null=''会自动将空字符串转换为DB null 然而,现在我正在使用SQlAlchemy。它是否有一个类似于insert语句的魔术参数来将空字符串转换为Null insert

我正在进行大容量插入,其中一些列可以用空字符串
'
表示,我想将该空字符串转换为Postgresql DB Null值

如果我使用的是psycopg2的
copy\u from
,它很简单,我会有这样的东西:

copy_from(类似文件的对象,表,sep='|',null='',size=8192,columns=None)

null=''
会自动将空字符串转换为DB null

然而,现在我正在使用SQlAlchemy。它是否有一个类似于insert语句的魔术参数来将空字符串转换为Null

insert语句是指sqlalchemy core的.insert(),如下面的示例所示

user_table = Table('user_table', metadata, autoload=True, autoload_with=engine)
sql = user_table.insert().values(sql_binder)
conn = engine.connect()
trans = conn.begin()
conn.execute(sql, db_users)
trans.commit()
conn.close()

我知道我可以迭代每个值,检查它是否为空字符串,然后传递Python的
None
,但这需要大量迭代,我想避免这种情况。

大量迭代有什么问题?在堆栈中的某个地方,这个列表需要迭代,所以你不能在O(n)运行时上有所改进。真的没什么错。情况是,要插入的每一行大约有200列,要导入的每个文件
-csv-
大约有100000行,这将使每个文件进行200万次迭代。如果我能像copy_from函数那样拥有一个银弹,我希望避免这种情况……我的观点是,即使SQLAlchemy支持它,它也必须迭代并用
None
s替换所有空字符串,就像您自己做的那样。它不会仅仅因为框架支持它就神奇地加快速度。然而,
copy\u from
通常速度更快,因为这是一种不同的机制,所以如果您关心速度,应该使用它。我的理解是sqlalchemy使用psycopg2驱动程序连接到postgresql数据库。我们还知道,psycopg2中提供了从复制的
copy_。问题是,sqlalchemy是否公开了这个功能?如果有,我想用它。如果不成功,那就祝你好运,我会重复。这就是问题所在。到目前为止,我还没有找到从SQLAlchem运行copy_from函数的方法。在这种情况下,您可能想看看。大量迭代有什么问题?在堆栈中的某个地方,这个列表需要迭代,所以你不能在O(n)运行时上有所改进。真的没什么错。情况是,要插入的每一行大约有200列,要导入的每个文件
-csv-
大约有100000行,这将使每个文件进行200万次迭代。如果我能像copy_from函数那样拥有一个银弹,我希望避免这种情况……我的观点是,即使SQLAlchemy支持它,它也必须迭代并用
None
s替换所有空字符串,就像您自己做的那样。它不会仅仅因为框架支持它就神奇地加快速度。然而,
copy\u from
通常速度更快,因为这是一种不同的机制,所以如果您关心速度,应该使用它。我的理解是sqlalchemy使用psycopg2驱动程序连接到postgresql数据库。我们还知道,psycopg2中提供了从
复制的
copy_。问题是,sqlalchemy是否公开了这个功能?如果有,我想用它。如果不成功,那就祝你好运,我会重复。这就是问题所在。到目前为止,我还没有找到从SQLAlchem运行copy_from函数的方法。在这种情况下,您可能需要查看一下。