class Database:
def set_db_setting(self, host, username, passwd, database):
try:
db = pymysql.connect(host=host, user=username, passwd=passwd, db=database)
except:
print('\nerror connecting to database\n')
return db
功能失效时
def db_select(self, *selected_fields, **kwargs):
self.selected_fields = selected_fields = list(selected_fields)
self.table = (kwargs['table']
if 'table' in kwargs
else selected_fields.pop())
self.where_field = (kwargs['where_field']
if 'where_field' in kwargs
else selected_fields.pop())
try:
with db.cursor() as cursor:
sql_tld_id_query = Database.query_stmt_list[0]+ selected_fields + Database.query_stmt_list[4] + table + Database.query_stmt_list[5] + where_field + '=' + 'www.website.com'
except Exception as gatherid_err:
print("exception was {}".format(gatherid_err))
db.rollback()
当我在最后实例化时,它失败了:
dbclass = Database()
dbclass.set_db_setting('localhost', 'root', 'password', 'garbagedb')
dbclass.db_select(['id', 'name'], table='tld', where_field='name')
更新错误
exception was Can't convert 'list' object to str implicitly
在这条线上:
sql_tld_id_query = Database.query_stmt_list[0]+ selected_fields + Database.query_stmt_list[4] + table + Database.query_stmt_list[5] + where_field + '=' + 'www.website.com'
我试着把它改成:
sql_tld_id_query = str(Database.query_stmt_list[0]+ selected_fields + Database.query_stmt_list[4] + table + Database.query_stmt_list[5] + where_field + '=' + 'www.ebay.com')
但这并不能解决问题。有人能帮忙吗?你知道吗
根据你透露的密码
在这里,您放弃调用的结果(即您通过“return db”返回的结果)
在这里,你称之为你从未实例化过的东西:
你在想什么?你知道吗
然后,即使您没有忘记将调用结果赋给变量,也没有将其传递给第二个函数。 也就是说,你要用它作为全局变量。你知道吗
这绝对是一个公爵,如果不是国王,在反模式。 一定要避免。你知道吗
PS并了解变量作用域是什么。你知道吗
首先,缩进很重要。return语句不在
set_db_setting()
内,因此它不返回任何内容。你知道吗其次,函数中定义的变量有一个作用域,该作用域仅限于函数内部,因此
db
不会在两个方法调用之间神奇地传输。要么将它存储在self.db
(并在db_select()
中引用它),要么从set_db_setting()
返回它,将它存储在局部变量中,然后显式地将作为参数传递到db_select()
。你知道吗使用
self.db
并将其存储为实例变量将是编写代码的更常规的方法。你知道吗函数似乎没有设置名为db的类变量。它只是返回那个值。然后在你的类中你试图访问一个尚未设置的变量。你知道吗
我相信你需要这样的东西。你知道吗
既然已经设置了变量,那么类中的其他方法就可以访问它了。你知道吗
相关问题 更多 >
编程相关推荐