2017-01-23 148 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() 
相关问题