【问题标题】:Python pymysql : cannot run multiple statementsPython pymysql:无法运行多个语句
【发布时间】:2020-09-17 10:15:34
【问题描述】:

我正在处理一个需要读取 input.sql 文件并获取其中所有命令的项目。 它对所有其他语句都可以正常工作,但对于程序则无法正常工作。

您可以尝试使用这些输入自己复制它。

CREATE TABLE IF NOT EXISTS products( 
Prod_id INT AUTO_INCREMENT PRIMARY KEY, 
Name VARCHAR(255) NOT NULL, 
Price INT NOT NULL, 
 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);

Insert into products(Name,Price) Values('soap',1);
Insert into products(Name,Price) Values('toilet paper',2);
Insert into products(Name,Price) Values('Choco taco',3);

CREATE PROCEDURE GetAllProducts() 
BEGIN     
SELECT * FROM products; 
END;

但是,当我执行创建过程和调用语句时,我无法这样做。谁能帮帮我?

下面的一些语句,但它不起作用

以 connection.cursor() 作为光标:

    for statement in script.split(';'): 

        if len(statement) > 0:

            cursor.execute(statement + ';')

我知道问题是因为 ;定界符,但是我怎样才能确保整个过程得到执行呢?

pymysql的游标好像一次执行一条语句,不允许多次执行?

【问题讨论】:

    标签: python mysql python-3.x pymysql


    【解决方案1】:

    因为您在; 上进行拆分,所以该过程将作为两个单独的语句执行:

    BEGIN
    SELECT * FROM products;
    

    END;

    都是无效的 SQL。

    【讨论】:

    • 是的,我明白这一点。但即使我使用不同的分隔符执行,它也会显示错误,我该如何挽救它以使其对所有这些语句执行?
    • 我可以在过程中设置分隔符吗?
    • mysql.connector 包 (github.com/mysql/mysql-connector-python) 应该让您一次执行多个语句。
    • 那我应该怎么做才能运行一个创建过程呢?因为我不能添加分隔符 :'( 因为 if 只允许单个语句
    猜你喜欢
    • 2014-08-25
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 2014-02-24
    • 2019-09-01
    • 2017-09-06
    相关资源
    最近更新 更多