2017-01-23 7 views
3

Ich versuche, einige Datenbankfelder mithilfe einer Python-Funktion zu einer SQLite DB zu aktualisieren. Ich erhalte den folgenden Fehler:ValueError: Operationsparameter muss str sein

Valueerror: Betriebsparameter str werden muss

Unten ist mein Code. Ich würde gerne wissen, wie man mehrere Spalten in einer SQLite-Datenbank aktualisiert.

def updateEventData(): 
    ID = input('Enter ID of row you\'d like to update: ') 
    eventname = input('\nPlease enter event name: ') 
    startdate = input('\nPlease enter event start date: (DD/MM/YYYY): ') 
    enddate = input('\nPlease enter event end date: (DD/MM/YYYY): ') 
    venue = input('\nPlease enter event venue: ') 

    # Sql update 
    sql = """ 
    UPDATE event_details 
    SET name, startdate, enddate, venue, (?, ?, ?, ?) 
    WHERE ROWID = ? 
    """, (eventname, startdate, enddate, venue, ID) 
    c.execute(sql) 
    conn.commit() 
+0

stacktrace bitte. –

Antwort

3

Sie müssen separat sql und Parameter zu übergeben, nicht als Tupel sql und Parameter enthält:

sql = """ 
UPDATE event_details 
SET name, startdate, enddate, venue, (?, ?, ?, ?) 
WHERE ROWID = ? 
""" 
c.execute(sql, (eventname, startdate, enddate, venue, ID)) 
#   ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
#  separated argument, not as a single argument 
conn.commit() 

DB API 2 documentation, Cursor.execute(operation, parameter)

-1

Siehe Wenn Sie Kolben verwenden, Alles, was Sie tun müssen, Update mehrerer Felder ist Instanziieren der Datenbank-Klasse und das Commit der Sitzung (Sitzungen werden sparen Sie viel Zeit überprüfen Sie sie here)

Zum Beispiel Name Ihres DB-Klasse sind Ereignisse, und die Felder sind event_name, start_date, end_date and venue mit Sitzungen:

def updateEventData(): 
    ID = input('Enter ID of row you\'d like to update: ') 
    eventname = input('\nPlease enter event name: ') 
    startdate = input('\nPlease enter event start date: (DD/MM/YYYY): ') 
    enddate = input('\nPlease enter event end date: (DD/MM/YYYY): ') 
    venue = input('\nPlease enter event venue: ') 

    events = Events(event_name=eventname, start_date=startdate, end_date=enddate, venue=venue) 
    events.session.commit() 

Sitzungen Zum Instantiieren Sie sqlalchemy benötigen, importieren Sie einfach die sessionmaker von sqlalchemy.orm und create_engine dann sind Sie gut zu gehen. vollständiger Code:

from sqlalchemy import create_engine 
from sqlalchemy.orm import sessionmaker 

class Foo(object): 

    engine = create_engine('sqlite:///foo.sqlite', echo = False) 

    # create new session object for queries 
    Session = sessionmaker() 
    Session.configure(bind=engine) 
    session = Session() 

    def updateEventData(): 
     ID = input('Enter ID of row you\'d like to update: ') 
     eventname = input('\nPlease enter event name: ') 
     startdate = input('\nPlease enter event start date: (DD/MM/YYYY): ') 
     enddate = input('\nPlease enter event end date: (DD/MM/YYYY): ') 
     venue = input('\nPlease enter event venue: ') 

     events = Events(event_name=eventname, start_date=startdate, end_date=enddate, venue=venue) 
     events.session.add(events) 
     events.session.commit() 
Verwandte Themen