Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中如何使用sqlalchemy调用mysql函数?_Python_Mysql_Pandas_Database_Sqlalchemy - Fatal编程技术网

在python中如何使用sqlalchemy调用mysql函数?

在python中如何使用sqlalchemy调用mysql函数?,python,mysql,pandas,database,sqlalchemy,Python,Mysql,Pandas,Database,Sqlalchemy,我试图从python中调用mysql中的一个函数这里是我的代码 使用炼金术 CREATE DEFINER=`root`@`localhost` FUNCTION `my_function`() RETURNS int READS SQL DATA DETERMINISTIC BEGIN insert into employeedata (select * from employee where joiningdate <'20160101'); RETURN 1; EN

我试图从python中调用mysql中的一个函数这里是我的代码 使用炼金术

CREATE DEFINER=`root`@`localhost` FUNCTION `my_function`() RETURNS int
    READS SQL DATA
    DETERMINISTIC
BEGIN
insert into employeedata (select * from employee where joiningdate <'20160101');


RETURN 1;
END
还尝试使用MySQL连接器


函数是通过工作台而不是python调用的。它在执行时没有给我任何错误,但结果没有改变。

如果您只想运行一个函数,则不需要使用SQL接口。您可以使用以下选项:

from sqlalchemy import text

with engine.connect() as connection:
    result = connection.execute(text("SELECT my_function()"))
    print(result)
参考:

text()
然后将“强制”此自动提交

另一种方法是使用具有显式
autocommit
执行选项的上下文管理器:

with engine.connect().execution_options(autocommit=True) as connection:
   connection.execute("SELECT my_function()")
要使用SQLalchemy连接而不是Pandas API测试MWE示例,请假设您想从表
表\u name
中读取10项:

with engine.connect() as connection:
    rs = connection.execute("SELECT * FROM table_name LIMIT 10")
    for row in rs:
        print(row)

结果不变是什么意思?你有什么数据吗?你能打印以下内容吗
table\u df=pd.读取\u sql\u table(table\u name,con=engine)
然后用
table\u df.head()
打印,其中
table\u name
是您的MySQL表吗?@josemrivera我没有读取表,调用存储在MySQL中的函数。来自python。调用函数Yep后,employee表记录应该插入employee数据表中,但为了测试连接,我建议执行一个简单的表读取。连接正常吗?@josemrivera是的,它对简单表readno有效。它不正常。您收到任何错误消息吗?我刚刚测试过(我会更新答案),代码是正确的。没有,我没有收到任何错误消息。使用
pd.read\u sql\u查询(“选择我的函数()”,引擎)
它也返回1,但表中的记录不会被插入。是的,我用engine.connect()作为con:rs=con.execute('SELECT*FROM table_name LIMIT 10')对rs:print(row)中的行进行了测试。这可能与SQLAlchemy的自动提交的性质有关:您能尝试一下我将在答案中发布的替代方法吗?使用
text()
我们可能会讨论SQLAlchemy没有检测到必须提交操作的问题。
with engine.connect() as connection:
    rs = connection.execute("SELECT * FROM table_name LIMIT 10")
    for row in rs:
        print(row)