问题描述
我在Excel中有4张纸,我将其导入到Postgresql中。
我想在表格中添加UUID列
我已经在每个表中创建了UUID列,但是我已经
不知道如何将数据导入该列
请帮忙
uuid可能会使用循环自动递增
from sqlalchemy import create_engine
engine = create_engine('postgresql+psycopg2://postgres:xxxxx@localhost:xxxx/my_xxxx')
def sheets(data,con,file):
if(data=='Sheet1'):
df1 = pd.read_excel(file,'Sheet1')
df1.to_sql(name='table1',con=engine,if_exists='append',index=False)
elif(data=='Sheet2'):
df2=pd.read_excel(file,'Sheet2')
df2.to_sql(name='table2',index=False)
elif(data=='Sheet3'):
df3=pd.read_excel(file,'Sheet3')
df3.to_sql(name='table3',index=False)
elif(data=='Sheet4'):
df4 = pd.read_excel(file,'Sheet4')
df4.to_sql(name='table4',index=False)
xls = pd.ExcelFile('postgre.xlsx')
with pd.ExcelFile('postgre.xlsx') as xls:
for sheet_name in xls.sheet_names:
sheets(sheet_name,engine,xls)
解决方法
请勿导入UUID,而让Postgres通过在表上定义默认值来生成它。您将需要安装扩展名pgcrypto或uuid-ossp。然后
for pgcrypto:
alter table table_name alter column uuid_column_name set default generate_random_uuid();
for uuid-ossp:
alter table table_name alter column uuid_column_name set default uuid_generate_v4();
这两种方法都可能要求您指定要上传的列,因为您没有在电子表格中包含uuid列。那应该没什么大问题。 (恕我直言)您还是应该这样做。