SQLAlchemy、Psycopg2 和 Postgresql COPY

2024-01-01

看起来 Psycopg 有一个自定义命令来执行COPY http://www.postgresql.org/docs/current/static/sql-copy.html:

使用cursor.copy_from() 的psycopg2 COPY 在大输入时冻结 https://stackoverflow.com/questions/3491864/

有没有办法通过 SQLAlchemy 访问此功能?


接受的答案是正确的,但如果您想要的不仅仅是 EoghanM 的评论,以下内容对我将表格复制到 CSV 有用...

from sqlalchemy import sessionmaker, create_engine

eng = create_engine("postgresql://user:pwd@host:5432/db")
ses = sessionmaker(bind=engine)

dbcopy_f = open('/tmp/some_table_copy.csv','wb')

copy_sql = 'COPY some_table TO STDOUT WITH CSV HEADER'

fake_conn = eng.raw_connection()
fake_cur = fake_conn.cursor()
fake_cur.copy_expert(copy_sql, dbcopy_f)

The sessionmaker不是必需的,但如果您习惯于同时创建引擎和会话来使用raw_connection您需要将它们分开(除非有某种方法可以通过我不知道的会话对象访问引擎)。提供给的 sql 字符串copy_expert也不是唯一的方法,还有一个基本的方法copy_to您可以将其与可以传递给普通参数的参数子集一起使用的函数COPY至查询。该命令的整体性能对我来说似乎很快,复制出约 20000 行的表。

http://initd.org/psycopg/docs/cursor.html#cursor.copy_to http://initd.org/psycopg/docs/cursor.html#cursor.copy_to http://docs.sqlalchemy.org/en/latest/core/connections.html#sqlalchemy.engine.Engine.raw_connection http://docs.sqlalchemy.org/en/latest/core/connections.html#sqlalchemy.engine.Engine.raw_connection

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQLAlchemy、Psycopg2 和 Postgresql COPY 的相关文章

随机推荐