我在文件
stored_procedure.sql
中存储了一个存储过程(ha)。如果我在一个SQL编辑软件中打开这个文件,我可以定义这个存储过程,并在Python或SQL中调用它。这个存储过程看起来像。
CREATE OR REPLACE PROCEDURE
test_proc (some_date VARCHAR(10))
RETURNS INT AS
BEGIN
INSERT INTO db.test
-- join TABLE 1 and TABLE 2 for final results
SELECT some_date;
RETURN 1;
END //
DELIMITER ;
然而,我希望Python能够读入存储过程文件,并将存储过程传递给数据库(如果存储过程被更新,但没有手动重新运行,代码会拾取重新定义的过程)。
当我把存储过程读入文本流并尝试执行时。
from sqlalchemy import create_engine
conn = create_engine(parameters_to_connect_to_database)
statement = open('stored_procedure.sql').read()
trans = conn.begin()
conn.execute(statement)
trans.commit()
我对conn.execute(statement)
有以下语法错误。
ProgrammingError: (pymysql.err.ProgrammingError) (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER //\nCREATE OR REPLACE PROCEDURE
我知道这个sql脚本实际上没有语法错误,因为如果我在一个sql编辑软件中,它可以手动运行。如果我把存储过程文件换成一个有创建表或插入语句的文件,就不会返回错误,插入也会成功。
我怎样才能编辑上述内容,以执行包含有SQL语句的文件,以及包含有存储过程的文件?