Mam tablicę, która zawiera nazwę kolumny mojej tabeli

column_names_list = ['TIMESTAMP', 'ID', 'PRENOM',  'AGE', 'HOB']

Chcę utworzyć ciąg, który zawiera zapytanie, które można wykonać za pomocą kursora.execute z Pythona Na przykład

def prepare_request( self, table_name, database) :
    column_names_list = ['TIMESTAMP', 'ID', 'PRENOM',  'AGE', 'HOB']
    print ( column_names_list ) 
    column_values = ["%s" for x in column_names_list]
    print ( column_values ) 
    request = "INSERT INTO "+database+"."+table_name+"("+column_names_list+")+ VALUES ("+column_values+");"
    print(request)

Kiedy wykonuję kod, otrzymuję ten błąd => TypeError: mogę łączyć tylko str (nie „list”) z str

Oczekiwany wynik:

INSERT INTO TEST.USERS ( TIMESTAMP , ID , PRENOM, AGE, HOB ) VALUES (%s, %s, %s, %s, %s);
-1
TheRight 31 marzec 2020, 18:07

3 odpowiedzi

Najlepsza odpowiedź

Musisz join() swoje wartości:

def prepare_request( self, table_name, database) :
    column_names_list = ['TIMESTAMP', 'ID', 'PRENOM',  'AGE', 'HOB']
    print ( column_names_list ) 
    column_values = ["%s" for x in column_names_list]
    print ( column_values ) 
    request = "INSERT INTO "+database+"."+table_name+" VALUES "+", ".join(column_values)+");"
    print(request)

Ale także column_values = ["%s" for x in column_names_list] tak naprawdę nie robi nic, ale tworzy listę z wartościami len(column_names_list), gdzie każda z nich to "%s".

1
Hollay-Horváth Zsombor 31 marzec 2020, 15:30

Zastąp przedostatnią linię następującym kodem:

request = "INSERT INTO "+database+"."+table_name+str(tuple(column_names_list))+"+ VALUES "+str(tuple(column_values))+";"

Właściwie pojawia się problem, ponieważ kolumna_nazwy_list i wartości_kolumn są listami i nie można ich łączyć z ciągami. To, co tutaj zrobiłem, to najpierw przekonwertować je na ciągi za pomocą funkcji str (). Mam nadzieję, że to było pomocne.

1
Abhijeet.py 31 marzec 2020, 15:30

Próbować:

request = f"INSERT INTO {database}.{table_name} ({",".join(column_names_list)}) VALUES ({",".join(column_values)});"

1
Gabip 31 marzec 2020, 15:14