Python 从CSV创建具有正确列类型的SQL表
我在这个网站上查看了很多问题,但找不到答案:如何从多个CSV源文件中创建多个新表(我使用的是PostgreSQL),其中新的数据库表列准确地反映了CSV列中的数据 我可以很好地编写CREATE TABLE语法,并且可以读取CSV文件的行/值,但是是否已经存在检查CSV文件并准确确定列类型的方法?在我建立自己的系统之前,我想检查一下这个系统是否已经存在 如果它还不存在,我的想法是使用Python、CSV模块和psycopg2模块构建一个Python脚本,该脚本将:Python 从CSV创建具有正确列类型的SQL表,python,sql,postgresql,pgadmin,Python,Sql,Postgresql,Pgadmin,我在这个网站上查看了很多问题,但找不到答案:如何从多个CSV源文件中创建多个新表(我使用的是PostgreSQL),其中新的数据库表列准确地反映了CSV列中的数据 我可以很好地编写CREATE TABLE语法,并且可以读取CSV文件的行/值,但是是否已经存在检查CSV文件并准确确定列类型的方法?在我建立自己的系统之前,我想检查一下这个系统是否已经存在 如果它还不存在,我的想法是使用Python、CSV模块和psycopg2模块构建一个Python脚本,该脚本将: 读取CSV文件 根据记录子集(1
SQL、PostgreSQL、Python中是否已经存在类似的工具,或者我是否应该使用另一个应用程序(类似于pgAdmin3)?您似乎需要事先了解结构。 只要看第一行就知道你有多少列了 CSV不携带任何类型信息,因此必须从数据上下文中推导 改进之前稍有错误的答案,您可以创建一个包含x个文本列的临时表,用数据填充它,然后处理数据
BEGIN;
CREATE TEMPORARY TABLE foo(a TEXT, b TEXT, c TEXT, ...) ON COMMIT DROP;
COPY foo FROM 'file.csv' WITH CSV;
<do the work>
END;
开始;
在COMMIT DROP上创建临时表foo(a文本、b文本、c文本等);
使用csv从“file.csv”复制foo;
结束;
警告,该文件需要由postgresql进程本身访问。这就产生了一些安全问题。另一个选择是通过STDIN提供数据
HTH我一直在处理类似的问题,最后编写了自己的模块,通过检查源文件来嗅探数据类型。所有反对者都有一些智慧,但也有一些理由值得这么做,特别是当我们无法控制输入数据格式(例如,处理政府公开数据)时,因此我在这个过程中学到了一些东西:
如果你可以避免进行自动类型检测,那是值得的,但这并不总是实用的,所以我希望这些提示能有所帮助。虽然这是一个很老的问题,但似乎没有一个令人满意的答案,我一直在努力解决samen的问题。随着SQLServerManagementStudio 2018版的推出,微软提供了一个非常好的解决方案
如果对同一文件以完全相同的方式运行上述步骤两次,第一个循环将使用“CREATETABLE…”语句,但第二个go将跳过表的创建。如果将第二次运行另存为SSIS(Integration Services)文件,则可以稍后重新运行整个安装程序,而无需扫描.csv文件。是否尝试自动创建这样的表,以考虑多个csv源?每个源都有自己的表?否则我会认为