You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用SQL文件初始化Python Testcontainers中的Postgres?

用SQL文件初始化Testcontainers Python版的Postgres容器

方法1:挂载SQL文件到容器初始化目录

Postgres官方容器启动时会自动执行/docker-entrypoint-initdb.d/目录下的SQL脚本,直接把本地脚本挂载到这个路径即可完成初始化:

from testcontainers.postgres import PostgresContainer
import os

# 本地SQL文件的绝对路径
sql_script = os.path.abspath("./init.sql")

with PostgresContainer("postgres:15") as container:
    # 将本地脚本挂载到容器的初始化目录
    container.with_volume_mapping(sql_script, "/docker-entrypoint-initdb.d/init.sql")
    # 容器启动后会自动执行脚本
    # 这里可以获取连接信息进行后续操作
    conn_url = container.get_connection_url()

方法2:通过容器命令执行SQL脚本

如果不想挂载文件,可读取本地脚本内容后,通过exec命令调用psql执行:

from testcontainers.postgres import PostgresContainer

with PostgresContainer("postgres:15") as container:
    # 读取本地SQL脚本内容
    with open("./init.sql", "r") as f:
        sql_content = f.read().replace("'", "\\'")  # 转义单引号避免命令报错
    
    # 执行SQL脚本
    exec_result = container.exec(f"psql -U {container.username} -d {container.dbname} -c '{sql_content}'")
    # 可根据exec_result判断脚本执行状态

注意事项

  • 挂载文件时必须使用绝对路径,否则容器无法找到脚本
  • 脚本中的SQL语法要匹配所使用的Postgres版本
  • 避免脚本中创建与Testcontainers默认值冲突的用户或数据库(默认用户test,默认库test)

内容的提问来源于stack exchange,提问作者WebOrCode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 21:38:08