我有一个运行在本地机器上的MySQL数据库,并且能够使用MySQLConnector库进行读写。
我有独立的读写方法,这些方法工作得很好,我只是想稍微清理一下,希望我所有的CRUD操作都是某个类DatabaseOperations的一部分。然而,我不断地得到各种各样的错误,但我还没有找到答案,所以我希望能在这里找到更多的信息,说明我需要做些什么才能使基于类的CRUD操作工作。
下面是一种写入某些表的方法,我有一个类似的db_read方法,除了使用不同的SQL命令外,它们完全相同。
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()下面是一个基于类的实现的尝试
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命令。
我得到的最大错误是:
AttributeError: 'MySQLConnection' object has no attribute 'execute'谢谢!
发布于 2022-12-01 16:33:40
我确实看到您在readFromDatabase()类方法中定义了readFromDatabase(),因此您尝试使用连接对象作为游标对象(运行db_cursor.execute(...)时会因为它而得到错误)。
根据您的代码,正确的定义是:
# reference: https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlconnection-cursor.html
db_cursor = self.db_connection.cursor()最后,您需要关闭游标,我建议查看一下mysql-连接器-python文档,了解如何打开/关闭游标,创建不同的游标类型,并了解更多关于API的一般信息。
https://stackoverflow.com/questions/74643379
复制相似问题