Python 接受列表作为类方法中的参数-name';选定的#u字段';没有定义
我有一个类Python 接受列表作为类方法中的参数-name';选定的#u字段';没有定义,python,python-3.x,Python,Python 3.x,我有一个类数据库,看起来像: 已更新 class Database(): query_stmt_list = ['SELECT','INSERT','UPDATE','DELETE','FROM','WHERE'] def db_select(self, *selected_fields, **kwargs): self.selected_fields = selected_fields = list(selected_field
数据库
,看起来像:
已更新
class Database():
query_stmt_list = ['SELECT','INSERT','UPDATE','DELETE','FROM','WHERE']
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 = self.query_stmt_list[0]+ selected_fields + self.query_stmt_list[4] + table + self.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.db_select(*selected_fields, table='tld', where_field='name')
但我得到一个错误:
line 51, in <module>
dbclass.db_select(*selected_fields, table='tld', where_field='name')
NameError: name 'selected_fields' is not defined
第51行,在
dbclass.db\u select(*选定的\u字段,table='tld',其中\u field='name')
名称错误:未定义名称“所选字段”
谢谢。如果您想解包“选定的\u字段
”变量,如dbclass.db\u select(*选定的\u字段,'tld','name')
,您最好:
*
”db\u select
方法以应用一个技巧,该技巧可以在*selected\u字段之后接受两个额外参数,如下所示:
def db_select(self, *args):
self.selected_fields = selected_fields = list(args)
self.where_field = selected_fields.pop()
self.table = selected_fields.pop()
...
def db_select(self, *args, **kwargs):
self.selected_fields = selected_fields = list(args)
self.where_field = (kwargs['where_field']
if 'where_field' in kwargs
else selected_fields.pop())
self.table = (kwargs['table']
if 'table' in kwargs
else selected_fields.pop())
...
db\u select
方法也接受命名参数,例如dbclass.db\u select(*selected\u fields,table='tld',where\u field='name')
,可以这样做:
def db_select(self, *args):
self.selected_fields = selected_fields = list(args)
self.where_field = selected_fields.pop()
self.table = selected_fields.pop()
...
def db_select(self, *args, **kwargs):
self.selected_fields = selected_fields = list(args)
self.where_field = (kwargs['where_field']
if 'where_field' in kwargs
else selected_fields.pop())
self.table = (kwargs['table']
if 'table' in kwargs
else selected_fields.pop())
...
您试图显示一个名为
selected\u fields
的变量,该变量未定义。我看不出复杂性在哪里。您没有在函数之外定义所选的\u字段。另外,您可能不希望调用它。@Goodies-如果我通过dbclass.db\u-select('somefield','someotherfield','tld','name')调用它,
不会将'somefield','someotherfield','tld','name'视为所选字段的一部分。
paramdbclass.db\u-select(['somefield','someotherfield','tld','name'))
。这看起来棒极了。我试过了,但它抛出了一个错误'dbclass.db\u select(*selected\u fields,table='tld',where\u field='name')NameError:name'selected\u fields'未定义'。你能看到我更新的代码吗?@Jshee:正如@kindall所说,在调用dbclass.db\u select
@Philp之前,你需要定义变量selected\u字段
-你看到更新的代码和错误了吗?我非常感谢你的邀请help@Philp-您的意思是:selected\u fields=['col1',col12']
然后dbclass.dbselect(*selected\u fields,table='tld',where'u field='name')
?