在python中如何使用sqlalchemy调用mysql函数?
我试图从python中调用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
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)