我假设你的意图是使用对象关系API。
因此,要更新数据库中的行,您需要通过从表记录加载映射对象并更新对象的属性来完成此操作。
请参阅下面的代码示例。
请注意,我添加了用于创建新映射对象并在表中创建第一条记录的示例代码,并且末尾还有用于删除记录的注释掉的代码。
from sqlalchemy import Column, DateTime, Integer, String, Table, MetaData
from sqlalchemy.orm import mapper
from sqlalchemy import create_engine, orm
metadata = MetaData()
product = Table('product', metadata,
Column('id', Integer, primary_key=True),
Column('name', String(1024), nullable=False, unique=True),
)
class Product(object):
def __init__(self, id, name):
self.id = id
self.name = name
def __repr__(self):
return "%s(%r,%r)" % (self.__class__.name,self.id,self.name)
mapper(Product, product)
db = create_engine('sqlite:////temp/test123.db')
metadata.create_all(db)
sm = orm.sessionmaker(bind=db, autoflush=True, autocommit=True, expire_on_commit=True)
session = orm.scoped_session(sm)
#create new Product record:
if session.query(Product).filter(Product.id==1).count()==0:
new_prod = Product("1","Product1")
print "Creating new product: %r" % new_prod
session.add(new_prod)
session.flush()
else:
print "product with id 1 already exists: %r" % session.query(Product).filter(Product.id==1).one()
print "loading Product with id=1"
prod = session.query(Product).filter(Product.id==1).one()
print "current name: %s" % prod.name
prod.name = "new name"
print prod
prod.name = 'test'
session.add(prod)
session.flush()
print prod
#session.delete(prod)
#session.flush()
PS SQLAlchemy 还提供SQL 表达式 API允许直接使用表记录而无需创建映射对象。在我的实践中,我们在大多数应用程序中使用对象关系 API,有时当我们需要高效执行低级数据库操作(例如通过一个查询插入或更新数千条记录)时,我们会使用 SQL 表达式 API。
SQLAlchemy 文档的直接链接: