尝试在 python 中运行 sqlalchemy 来管理我的 SQL 数据库时,AttributeError: 'Engine' object has no attribute 'execute'

回答 2 浏览 3807 2023-02-01

我有下面这行代码,一直给我一个错误,即引擎对象没有执行对象。我想我一切都对了,但不知道为什么一直在发生。似乎其他人也有这样的问题,重启他们的笔记本就可以了。我在使用Pycharm,并重新启动了它,但没有任何解决办法。非常感谢任何帮助!

import pandas as pd
from sqlalchemy import create_engine, text
import sqlalchemy
import pymysql


masterlist = pd.read_excel('Masterlist.xlsx')

user = 'root'
pw = 'test!*'
db = 'hcftest'

engine = create_engine("mysql+pymysql://{user}:{pw}@localhost:3306/{db}"
                           .format(user=user, pw=pw, db=db))


results = engine.execute(text("SELECT * FROM companyname;"))

for row in results:
    print(row)
novawaly 提问于2023-02-01
你需要engine.connect()。它很懒,直到需要时才会真正连接。roganjosh 2023-02-01
with engine.connect() as conn:roganjosh 2023-02-01
附注:如果你想要一个相当好的基于Python的GUI驱动的MySQL编辑器,Oracle创建了一个免费的MySQL Workbench,它使数据库工作像玩Excel一样简单。除非你只是在做一个概念验证,否则你可能想看看它,为你自己节省大量的时间。easleyfixed 2023-02-01
啊--完全错过了。谢谢你novawaly 2023-02-01
2 个回答
#1楼 已采纳
得票数 4

从1.4到2.0有一个变化。我相信上述代码在1.4版本的sqlalchemy中可以正常运行。设置SQLALCHEMY_WARN_20=1 python并运行上述代码会发现这个警告。

<stdin>:1: RemovedIn20Warning: The Engine.execute() method is considered legacy as of the 1.x series of SQLAlchemy and will be removed in 2.0. All statement execution in SQLAlchemy 2.0 is performed by the Connection.execute() method of Connection, or in the ORM by the Session.execute() method of Session. (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)

因此,现在正确的代码方式是:

with engine.connect() as conn:
    result = conn.execute(stmt)

来源这里描述的是1.4中的行为这里描述的是2.0中的行为

jonathan-dufault-kr 提问于2023-02-01
#2楼
得票数 1
from .. import db

def get():

    sql_statement = \
        """
            SELECT *
        """

    with db.engine.begin() as conn:
        response = conn.exec_driver_sql(sql_statement).all()
    
    return response
James Prentice 提问于2023-02-19