2017-05-20 4 views
0

Das ist mein Programm. Es sagt mir genau, wo der der Syntaxfehler ist, aber ich habe buchstäblich keine Ahnung, was das Problem ist:Syntaxfehler kann ich nicht herausfinden? python3

import sqlite3 

def create_table(dbName, table_name, sql): 
    with sqlite3.connect("ATM.db") as db: 
     cursor = db.cursor() 
     cursor.execute("select name from sqlite_master where name=?",(table_name,)) 
     result = cursor.fetchall() 
     keep_table = True 
     if len(result) == 1: 
      response = input("The table{0} already exists, do you wish to recreate? (y/n) \n".format(table_name)) 
      if response.lower() == "y": 
       keep_table = False 
       print("the {0} table will be recreated".format(table_name)) 
       cursor.execute("drop table if exists {0}".format(table_name)) 
       db.commit() 
       insert_data() 
      else: 
       print("The existing table was kept") 
       insert_data() 
     else: 
      keep_table = False 
     if not keep_table: 
>>>>>>  cursor.execute(sql) #Problem is supposedly here? 
      db.commit() 
      insert_data() 

def insert_data(): 
    with sqlite3.connect("ATM.db") as db: 
     cursor = db.cursor() 
     sql = """insert into ATM(Title, First Name, Surname, Balance) values (Mr., Jeremy, Clarkson, 172.16), 
                      (Miss, Suzanne, Perry, 15.62)""" 
     cursor.execute(sql, values) 
     db.commit() 


dbName = "ATM.db" 
sql = """ create table ATM 
      (CustomerID integer, 
      Title text 
      First Name text, 
      Surname text, 
      Balance real, 
      CustomerID(CustomerID))""" 
create_table(dbName, "ATM", sql) 

Dies ist die Syntaxfehlermeldung Ich erhalte. Ich habe in den Code setzen Pfeile, die hervorhebt, wo sie den Hinweis auf:

line 23, in create_table 
    cursor.execute(sql) 
sqlite3.OperationalError: near "(": syntax error 

Antwort

1

Der Fehler in der SQL-Code, nicht der Python.

Ein paar Dinge:

  1. Sie müssen alle Ihre sqlite3 Befehle mit einem Semikolon enden, oder aber es wird einfach wie ein Befehl zu lesen. Das führte zu Verwirrung darüber, wo der Fehler lag.
  2. Hinzufügen des Semikolons, sehen Sie, dass das Problem tatsächlich in Ihrem CREATE TABLE Befehl ist. Diese Zeile ergibt keinen Sinn: "CustomerID(CustomerID))". Wollten Sie eine PRIMARY KEY einstellen?

    create table ATM (
        CustomerID integer, 
        Title text 
        First Name text, 
        Surname text, 
        Balance real, 
        PRIMARY KEY(CustomerID) 
    ); 
    

Übrigens, haben Sie ein anderes Problem. Das ist Ihre Abfrage:

insert into ATM(Title, First Name, Surname, Balance) values (Mr., Jeremy, Clarkson, 172.16), 
                     (Miss, Suzanne, Perry, 15.62) 

Das Problem ist, dass Sie Ihre Strings in Anführungszeichen wickeln müssen, anstatt sich als bloße Worte Behandlung und die Hoffnung, sie werden richtig interpretiert werden:

insert into ATM(Title, First Name, Surname, Balance) values ("Mr.", "Jeremy", "Clarkson", 172.16), 
                     ("Miss", "Suzanne", "Perry", 15.62); 

Andernfalls Es ist eine ungültige Abfrage, weil die bloßen Wörter es falsch formatieren.

+0

Ich bekomme immer noch die gleiche Syntaxfehler, erkannte ich meinen Fehler in dieser Abfrage und änderte es bereits! Ich habe es sogar getestet, indem ich die ganze Einfügedatenfunktion lösche, und ich habe immer noch den gleichen Syntaxfehler, der auf cursor.execute (sql) zeigt sqlite3.OperationalError: nahe "(": Syntaxfehler –

+1

Got it-edited und behoben. –

+0

Vielen Dank für Ihre Hilfe! Einen schönen Tag noch! –

Verwandte Themen