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

lin*_*ndy 22 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
);
Run Code Online (Sandbox Code Playgroud)

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

我现有的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())
Run Code Online (Sandbox Code Playgroud)

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

Cra*_*ger 48

你可以使用execute:

with self.connection as cursor:
    cursor.execute(open("schema.sql", "r").read())
Run Code Online (Sandbox Code Playgroud)

虽然您可能希望首先将psycopg2设置为autocommit模式,但您可以使用脚本自己的事务管理.

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

请注意,这不适用于:

  • 包含psql反斜杠命令的任何内容
  • 复制..从STDIN
  • 长的输入

...因此不适用于转储 pg_dump


Lis*_*ael 9

由于缺乏声誉,我无法回复所选答案的评论,所以我会帮助解决COPY问题.

根据数据库的音量,pg_dump --inserts输出INSERTs而不是COPYs