2017-08-02 1 views
1

Ich benutze Python-Operation Postgresql-Datenbank, die Implementierung von SQL, entfernt die Anführungszeichen, was zu Anfragen fehlgeschlagen, wie zu vermeiden?Die Python-Operation Datenbank Fehler

def build_sql(self,table_name,keys,condition): 
    print(condition) 
    # condition = { 
    #  "os":["Linux","Windows"], 
    #  "client_type":["ordinary"], 
    #  "client_status":'1', 
    #  "offset":"1", 
    #  "limit":"8" 
    # } 
    sql_header = "SELECT %s FROM %s" % (keys,table_name) 
    sql_condition = [] 
    sql_range = [] 
    sql_sort = [] 
    sql_orederby = [] 
    for key in condition: 
     if isinstance(condition[key],list): 
      sql_condition.append(key+" in ("+",".join(condition[key])+")") 
     elif key == 'limit' or key == 'offset': 
      sql_range.append(key + " " + condition[key]) 
     else: 
      sql_condition.append(key + " = " + condition[key]) 
    print(sql_condition) 
    print(sql_range) 
    sql_condition = [str(i) for i in sql_condition] 
    if not sql_condition == []: 
     sql_condition = " where " + " and ".join(sql_condition) + " " 
    sql = sql_header + sql_condition + " ".join(sql_range) 
    return sql 

Fehler:

MySQL Error Code : column "winxp" does not exist 
LINE 1: ...T * FROM ksc_client_info where base_client_os in (WinXP) and... 
+0

Bitte markieren, es nicht mit postgresql wenn es nur für MySQL (und Fehler deuten darauf hin, dass) –

Antwort

1

Wohlgemerkt ich habe nicht viel Python Erfahrung haben, aber im Grunde haben Sie keine einfachen Anführungszeichen in dieser Reihenfolge, also entweder Sie diejenigen hinzufügen müssen, bevor es vorbei Funktion oder zum Beispiel während join(), wie folgt aus:

sql_condition.append(key+" in ("+"'{0}'".format("','".join(condition[key]))+")") 

Sie andere Lösungen in diesen Fragen sehen:

Join a list of strings in python and wrap each string in quotation marks

Add quotes to every list elements