在Python中的psycopg2中执行.sql模式

时间:2013-06-23 13:11:31

标签: python postgresql schema psycopg2

我有一个存储在.sql文件中的PostgreSQL架构。它看起来像:

CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY,
    facebook_id TEXT NOT NULL,
    name TEXT NOT NULL,
    access_token TEXT,
    created INTEGER NOT NULL
);

连接数据库后如何运行此模式?

我现有的Python代码适用于SQLite数据库:

# Create database connection
self.connection = sqlite3.connect("example.db")

# Run database schema
with self.connection as cursor:
    cursor.executescript(open("schema.sql", "r").read())

但是psycopg2在游标上没有executescript方法。那么,我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:44)

您可以使用execute

with self.connection as cursor:
    cursor.execute(open("schema.sql", "r").read())

虽然你可能想要set psycopg2 to autocommit mode first,所以你可以使用脚本自己的事务管理。

如果psycopg2提供了一个更聪明的模式,它一次只能在一个语句中读取文件并将其发送到数据库,这是很好的,但目前还没有这样的模式。在面对$$引用(及其$delimiter$变体,其中分隔符可以是任何标识符)时,它需要一个相当可靠的解析器来正确执行它,standard_conforming_stringsE''字符串,嵌套函数体等

请注意,将使用:

  • 包含psql反斜杠命令的任何内容
  • COPY .. FROM STDIN
  • 非常长输入

...因此不适用于pg_dump

的转储

答案 1 :(得分:8)

我无法通过缺乏声誉来回复所选答案的评论,因此我会回答COPY问题的帮助。

根据您的数据库的数量,pg_dump --inserts输出INSERT而不是COPY s