4

我正在尝试将 200 个 SAS XPT 文件导入我的 PostgreSQL 数据库:

engine = create_engine('postgresql://user:pwd@server:5432/dbName')
for file in listdir(dataPath):
    name, ext = file.split('.', 1)
    with open(join(dataPath, file), 'rb') as f:
        xport.to_dataframe(f).to_sql(name, engine, schema='schemaName', if_exists='replace', index=False)
    print("Successfully wrote ", file, " to database.")

但是,生成的 SQL 对所有标识符都有双引号,例如:CREATE TABLE "Y2009"."ACQ_F" ("SEQN" FLOAT(53), "ACD010A" FLOAT(53));. 问题是,如果列/表/模式是用引号创建的,那么每次我需要查询它们时,我也必须包括引号,同时使用精确的大写

我想去掉引号,而我自己不能编写自定义 SQL,因为这些文件每个都有非常不同的结构。

4

1 回答 1

4

PostgreSQL 需要引用大写的表/列名(参考)。这就是为什么引用 SQLalchemy 构造的 SQL 中的标识符的原因。为避免这种情况,请将数据框的列名全部转换为小写:

with open(join(dataPath, file), 'rb') as f:
     data = xport.to_dataframe(f)
     data.columns = map(str.lower, data.columns)
     data.to_sql(name.lower(), engine, schema='y2007')
于 2018-01-04T03:08:41.120 回答