首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过类实现使用python在MySQL数据库上执行CRUD操作?

问如何通过类实现使用python在MySQL数据库上执行CRUD操作?
EN

Stack Overflow用户
提问于 2022-12-01 14:22:13
回答 1查看 26关注 0票数 -1

我有一个运行在本地机器上的MySQL数据库,并且能够使用MySQLConnector库进行读写。

我有独立的读写方法,这些方法工作得很好,我只是想稍微清理一下,希望我所有的CRUD操作都是某个类DatabaseOperations的一部分。然而,我不断地得到各种各样的错误,但我还没有找到答案,所以我希望能在这里找到更多的信息,说明我需要做些什么才能使基于类的CRUD操作工作。

下面是一种写入某些表的方法,我有一个类似的db_read方法,除了使用不同的SQL命令外,它们完全相同。

代码语言:javascript
复制
def db_write():
    local_ip = '192.168.120.191'  # LOCAL MACHINE SERVER RUNNING ON
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  # SOCK_DGRAM refers to UDP
    s.connect((local_ip, 80))

    client_ip = str(s.getsockname()[0])
    print(client_ip)
    db_connection = mysql.connector.connect(
            host="localhost",
            user="localuser",
            password="localpass",
            database="Testing"
        )
    db_cursor = db_connection.cursor()
    db_cursor.execute(
        f"INSERT INTO receiving (client_ip, client_message) VALUES( '{client_ip}', '{globalResultsList[0]}');"
    )
    db_connection.commit()
    db_cursor.close()

下面是一个基于类的实现的尝试

代码语言:javascript
复制
class DatabaseOperations:
    def __init__(self):
        self.local_ip = '192.168.120.191'  # LOCAL MACHINE SERVER RUNNING ON
        self.s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  # SOCK_DGRAM refers to UDP
        self.s.connect((self.local_ip, 80))
        self.db_connection = mysql.connector.connect(
            host="localhost",
            user="localuser",
            password="localpass",
            database="Testing"
        )

    def readFromDatabase(self):
        db_cursor = self.db_connection
        db_cursor.execute(
            f"select * from receiving;"
        )
        db_result = db_cursor.fetchall()
        print(db_result)

在这个类的下面,我有一个writeToDatabase方法,它只是有不同的SQL命令。

我得到的最大错误是:

代码语言:javascript
复制
AttributeError: 'MySQLConnection' object has no attribute 'execute'

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2022-12-01 16:33:40

我确实看到您在readFromDatabase()类方法中定义了readFromDatabase(),因此您尝试使用连接对象作为游标对象(运行db_cursor.execute(...)时会因为它而得到错误)。

根据您的代码,正确的定义是:

代码语言:javascript
复制
# reference: https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlconnection-cursor.html
db_cursor = self.db_connection.cursor()

最后,您需要关闭游标,我建议查看一下mysql-连接器-python文档,了解如何打开/关闭游标,创建不同的游标类型,并了解更多关于API的一般信息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74643379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档