在Class方法中将元素列表作为参数

时间:2017-02-08 14:06:21

标签: python list python-3.x class methods

我有一个课程Dbcrud(),我将在下面概述。

我想从方法中获取几个参数:db_select()一个是selected_fields,这是一个字段列表。

我无法形成方法db_select()以允许为selected_fields定义多个字段。

有人可以帮忙吗?

谢谢 已更新

class DbCrud:
    query_stmt_list = ['SELECT','INSERT','UPDATE','DELETE','FROM','WHERE']
    def __init__(self):
        self.query_stmt_list = DbCrud.query_stmt_list

    self.query_stmt_list = query_stmt_list

    def set_db_settings(self, host, username, passwd, database):
        self.host = host
        self.username = username
        self.passwd = passwd
        self.database = database
        db = pymysql.connect(host=host, user=username, passwd=passwd, db=database)
        return db
    def db_select(self, selected_fields, table, where_field):
        self.selected_fields = selected_fields
        self.table = table
        self.where_field = where_field
        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 + '=' + %s
                cursor.execute(sql_tld_id_query, (self.site_search_url,))
                tld_id_value = cursor.fetchone() 
        except:
            db.rollback()
            pass 

2 个答案:

答案 0 :(得分:1)

您始终可以将selected_fields视为一个列表,以便您可以使用', '.join

def db_select(self, selected_fields, table, where_field):
    query = 'select {selected_fields} {table} where {where_field} = 1'
    query = query.format(selected_fields=', '.join(selected_fields),
                         table=table, where_field=where_field)
    .
    .

obj.db_select(['col_a'], 'table_a', 'where_field_a')

请注意,这很容易受到SQL注入攻击,但原始代码也是如此(如果不是因为它目前存在语法错误)。

答案 1 :(得分:1)

你在这里遇到的问题很少:

<强> 1 您需要在init方法中使用该行(因为这是该类的c&#39;) 同样,query_stmt_list是静态成员,您应该使用类名作为前缀来访问他。

def __init__(self):    
    self.query_stmt_list = DbCrud.query_stmt_list

<强> 2 您无法使用selected_fields[]定义函数参数,这是一个语法错误,您可以随意传递给selected_fields

def db_select(self, selected_fields, table, where_field):

第3 当您尝试使用变量query_stmt_list时(在我附加的代码行中),您是说您想要类成员还是实例成员?

如果您将实例更改为self.query_stmt_list

如果是班级成员,则应将其更改为DbCrud.query_stmt_list

sql_tld_id_query = query_stmt_list[0] + selected_fields* + query_stmt_list[4] + table + query_stmt_list[5] + where_field + '=' + %s

另外,为了循环你可以做的selected_fields

query_stmt_list[0] + ", ".join(item for item in self.selected_fields) + query_stmt_list[4] ...