无法更新postgresql表中整数列的行值

时间:2017-08-20 17:27:01

标签: postgresql sqlalchemy flask-sqlalchemy

这是我为更新计数器而编写的虚拟函数。

def updateTable(tableName, visitorId, dtWithZone):
    db_uri = app.config["SQLALCHEMY_DATABASE_URI"]
    engine = create_engine(db_uri, connect_args={"options": "-c timezone={}".format(dtWithZone.timetz().tzinfo.zone)})

    # create session
    Session = sessionmaker()
    Session.configure(bind=engine)
    session = Session()

    meta = MetaData(engine, reflect=True)
    table = meta.tables[tableName]
    print dir(table)
    # update row to database
    row = session.query(table).filter(
          table.c.visitorId == visitorId).first()
    print 'original:', row.count
    row.count = row.count + 1
    print "updated {}".format(row.count)
    session.commit()
    conn.close()

但当它到达row.count = row.count + 1行时会抛出错误:

AttributeError: can't set attribute

这是表格

 \d visitorinfo;
             Table "public.visitorinfo"
    Column    |           Type           | Modifiers 
--------------+--------------------------+-----------
 platform     | character varying(15)    | 
 browser      | character varying(10)    | 
 visitorId    | character varying(10)    | not null
 language     | character varying(10)    | 
 version      | character varying(20)    | 
 cl_lat       | double precision         | 
 cl_lng       | double precision         | 
 count        | integer                  | 
 ip           | character varying(20)    | 
 visitor_time | timestamp with time zone | 
Indexes:
    "visitorinfo_pkey" PRIMARY KEY, btree ("visitorId")

我做错了什么?为什么说不能设置属性?

更新代码的一部分:

# update row to database
row = session.query(table).filter(
      table.c.visitorId == visitorId).first()
print 'original:', row.count
val = row.count
row.count = val + 1
print "updated {}".format(row.count)

1 个答案:

答案 0 :(得分:0)

使用更新查询:

UPDATE public.visitorinfo SET counter = counter + 1 WHERE visitorId = 'VisitorID'

确保从您的应用中填写最后一个“VisitorID”

相关问题