2017-01-23 14 views
3

私はいくつかのデータベースフィールドをPython関数を使ってSQLite DBに更新しようとしています。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

スタックトレースしてください。 –

答えて

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

など。あなたのDBのクラス名はイベントで、フィールドは、セッションと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.ormcreate_engineからsessionmakerをインポートします。フルコード:

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() 
関連する問題