Jshee
Jshee

Reputation: 2686

Python class throwing: can't convert 'list' object to str implicitl

It doesn't appear I can access my fields Database.query_stmt_list[i] in Python 3.5.

My code looks like:

class Database():
    query_stmt_list = ['SELECT','INSERT','UPDATE','DELETE','FROM','WHERE']
    def __init__(self):
        self.query_stmt_list = Database.query_stmt_list
    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 self.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'
            print("sql_tld_id_query is {}".format(sql_tld_id_query))   
        except Exception as gatherid_err:
            print("exception was {}".format(gatherid_err))
            self.db.rollback()

#instantiate class/method       
dbclass = Database()
dbclass.set_db_setting('localhost', 'root', 'password', 'garbagedb')
dbclass.db_select(['id', 'name'], table='tld', where_field='name')

I get an error like:

Can't convert 'list' object to str implicitly

on line:

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'

FULL STACK:

$ python dbcrud.py 
connected to: garbagedb
exception was sequence item 0: expected str instance, list found

What am I doing wrong here? Does anyone see what is going wrong?

Thank you

Upvotes: 1

Views: 167

Answers (1)

user447688
user447688

Reputation:

You're trying to form a string on that line. Rather than the term

selected_fields

which is a list, not a string, seems like you want

', '.join(selected_fields)

to form a proper comma separated, SQL-compliant listing of fields, yes?

sql_tld_id_query = Database.query_stmt_list[0]+ ', '.join(selected_fields) + Database.query_stmt_list[4] + table + Database.query_stmt_list[5] + where_field + '=' + 'www.website.com'

Upvotes: 1

Related Questions