Rya*_*yan 6 python postgresql sqlalchemy python-3.x postgresql-10
我正在尝试将 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.")
Run Code Online (Sandbox Code Playgroud)
但是,生成的 SQL 对所有标识符都使用双引号,例如:CREATE TABLE "Y2009"."ACQ_F" ("SEQN" FLOAT(53), "ACD010A" FLOAT(53));。问题是,如果列/表/模式是用引号创建的,那么每次我需要查询它们时,我都必须包含引号,同时使用准确的大小写。
我想去掉引号,但我无法自己编写自定义 SQL,因为这些文件各自具有非常不同的结构。
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')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4795 次 |
| 最近记录: |