本地连接到 render.com Postgres 服务器

问题描述 投票:0回答:1

我需要你的帮助来解决这个问题。

我编写了一个Python脚本来连接到postgres,但命令没有执行。

from sqlalchemy import create_engine
from sqlalchemy.exc import SQLAlchemyError
from sqlalchemy.orm import sessionmaker
from os import getenv
import psycopg2
from sqlalchemy import text

# Define a function to execute SQL script
def execute_sql_script(engine, script_file):
    """Execute SQL script"""
    with open(script_file, 'r', encoding="utf-8") as file:
        sql_script = file.read()
        print("File read")

    with engine.connect() as connection:
        try:
            print("trying to execute sql script")
            connection.execute(text(sql_script))
            print("SQL script executed successfully.")
        except SQLAlchemyError as e:
            print("Error executing SQL script:", e)

def main():
    db_url = f"postgresql://user:[email protected]/cheese_db"

    try:
        # Create SQLAlchemy engine
        engine = create_engine(db_url)

        # Create a session
        Session = sessionmaker(bind=engine)
        session = Session()

        # Path to your SQL script files
        script_files = ['website/static/sql/set_up.sql', 'website/static/sql/add_data.sql']

        # Execute SQL script
        for script_file in script_files:
            execute_sql_script(engine, script_file)

    except SQLAlchemyError as e:
        print("Error:", e)

if __name__ == '__main__':
    main()

因此第一个脚本应该创建表,第二个脚本添加数据。但第二个返回一个错误,表不存在(因此第一个脚本从未执行!)

这是输出:

File read
trying to execute sql script
SQL script executed successfully.
File read
trying to execute sql script
Error executing SQL script: (psycopg2.errors.UndefinedTable) relation "source" does not exist
LINE 1: INSERT INTO source (name) VALUES
python postgresql sqlalchemy render.com
1个回答
0
投票

解决办法是在

connection.commit()
之后添加
connection.execute()

© www.soinside.com 2019 - 2024. All rights reserved.