2017-01-23 91 views
3

我試圖使用python函數更新一些數據庫字段到SQLite數據庫。我不斷收到以下錯誤:ValueError:操作參數必須是str

ValueError異常:操作參數必須str的

下面是我的代碼。我很想知道如何更新sqlite數據庫中的多個列。

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請。 –

回答

3

你需要傳遞sql和參數分開,還不如含sql和參數元組:

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

如果使用燒瓶,所有你必須做的更新多個字段是實例化數據庫類和提交會話(會話將節省您的時間大量檢查出來here

例如你的數據庫的類名是活動,和領域是event_name, start_date, end_date and venue與會話:

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() 

爲了實例的會議,你需要SQLAlchemy的,剛剛從sqlalchemy.orm導入sessionmakercreate_engine,那麼你是好去。完整的代碼:

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() 
相關問題