我有一个课程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
答案 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] ...