我需要你的帮助来解决这个问题。
我编写了一个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
解决办法是在
connection.commit()
之后添加
connection.execute()