gpt4 book ai didi

连接到 MySQL 数据库的 Python 脚本 - 代码作为程序脚本运行,在 OOP 重构后失败

转载 作者:行者123 更新时间:2023-11-29 18:57:48 24 4
gpt4 key购买 nike

我有一个脚本,可以根据通过命令行接收到的输入来运行许多不同的报告。所有报告都从数据库读取并将结果作为 Pandas Dataframe 对象返回。

这是父类(super class),(省略大量属性 getter 和 setter 函数):

import mysql.connector
import pandas as p
import config

class Report(object):

_connection = None
_cursor = None

def __init__(self):
self._user = config.user
self._password = config.password
self._host = config.host
self._database = config.database
self._port = config.port
self._body_text = "Hello,\n\nPlease find attached these reports:\n\n"
self._connection = mysql.connector.connect(user=self._user, password=self._password, db=self._database,
host=self._host, port=self._port)
self._cursor = self._connection.cursor()

@property
def user(self):
return self._user

@user.setter
def user(self, value):
self._user = value


. . .


@property
def body_text(self):
return self._body_text

@body_text.setter
def body_text(self, value):
self._body_text = value

def append_body_text(self, value):
self._body_text += value

def get_data(self, server_cursor, query, columns):
server_cursor.execute(self, query)
results = server_cursor.fetchall()
data = p.DataFrame(data=results, columns=[columns])
return data

def get_today(self):
return self.today

def close(self):
self._connection_web.close()
self._connection_raw.close()

@staticmethod
def insert_variables_into_sql_statement(query, external_data):
final_query = query % external_data
return final_query

@staticmethod
def create_string_from_column(serial):
created_list = serial.tolist()
string = ', '.join(map(str, created_list))
return string

@staticmethod
def write_to_csv(data_frame, file_name):
data_frame.to_csv(config.baseDirectory + file_name, sep=',', index=False)

def generate_report(self):
data = self.get_data(self._cursor_web, self._query, self._columns)
self.write_to_csv(data, self._filename)
self.close()

这是我的子类的结构:

class ExampleReport(Report):
def __init__(self):
Report.__init__(self)
self._query = """
SELECT
u.first_name AS 'First Name',
u.last_name AS 'Last Name'
FROM users AS u
"""
self._columns = "'FirstName', 'LastName'"
self._filename = "example_report.csv"
self.append_body_text("* All users")

在我的主要方法中,我调用如下方法:

report = Reports.ExampleReport()
report.generate_report()

当我这样做时,我收到以下错误:

AttributeError: 'ExampleReport' object has no attribute 'encode'

当程序代码构造得很糟糕时,我的数据库连接工作没有问题(工作版本当前正在生产中)。现在我试图使其面向对象,但它已经损坏了。有人知道我做错了什么吗?

编辑:解决了我自己的问题!在父类(super class)的 get_data 函数中,第二行包含传递的错误 self 参数进入 server_cursor.execute(query) 行。一旦取出,错误就会消失。

最佳答案

解决了我自己的问题!在父类(super class)的 get_data 函数中,第二行包含传递到 server_cursor.execute(query) 行的错误 self 参数。一旦取出,错误就会消失。

关于连接到 MySQL 数据库的 Python 脚本 - 代码作为程序脚本运行,在 OOP 重构后失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44055682/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com