我尝试设计一个数据库模式并使用 alembic(如果重要,还可以使用 virtualenv)。我用 testdata 制作了一些 CSV 文件。目前我将它们复制到交互式 postgresql shell 上的数据库中
/copy table_name FROM '~/path/to/file.csv' WITH CSV;
我想自动化这个,所以当我通过 alembic 降级和升级时,我不必手动复制每个表。我尝试了以下方法:
在我的upgrade()
方法中的 alembic 版本文件中,在我的表格生成下方,我添加了:
op.execute("copy table_name FROM '~/path/to/file.csv' WITH CSV;", execution_options=None)
但它永远找不到文件。这是错误:
File "/Users/me/Workspace/project/venv/lib/python3.4/site-packages/SQLAlchemy-0.9.4-py3.4-macosx-10.6-intel.egg/sqlalchemy/engine/default.py", line 435, in do_execute
cursor.execute(statement, parameters)
sqlalchemy.exc.OperationalError: (OperationalError) could not open file "~/Workspace/project/path/to/file.csv" for reading: No such file or directory
"copy table_name FROM '~/Workspace/project/path/to/file.csv' WITH CSV;" {}
我究竟做错了什么?
我的问题是我尝试运行只能使用 sqlalchemy 命令的 postgresql 命令吗?如果是这样,我将如何通过 sqlalchemy 做到这一点?
我知道 alembic 中的批量导入选项,但我不想重新格式化所有内容。
是否有其他选项可以自动执行复制操作?有更好的工作流程吗?