目前我的数据库中有一个表,其中包含 id、name (str) 和 data (int) 列。有一个 html 单选按钮表单,其中选择一个按钮会将 1 添加到数据库中的相应条目:
length_table=session.query(func.count(Item.id)).scalar()
randoms=random.sample(range(length_table),2)
item1=session.query(Item).filter_by(id=randoms[0]+1).one()
item2=session.query(Item).filter_by(id=randoms[1]+1).one()
if request.POST.get('myradiobutton') == "left":
item1.data+=1
return HTTPFound(location=request.route_url('sorting'))
if request.POST.get('myradiobutton') == "right":
item2.data+=1
return HTTPFound(location=request.route_url('sorting'))
这可行,但它有一些伪劣行为(有时会添加到正确的项目,有时会添加到错误的项目)。因为我使用的是应该处理提交的pyramid_tm 。SQL日志给了我:
SELECT rowid, * FROM items ORDER BY rowid;
SELECT name, sql FROM sqlite_master WHERE type='table' ;
PRAGMA TABLE_INFO(items);
SELECT name, sql FROM sqlite_master WHERE type='index'
没有更新语句对我来说很奇怪。如果没有发布,如何更新数据库?我相信更新应该发生在 transaction.commit() 行上。
这是表定义:
class Item(Base):
__tablename__ = 'items'
id = Column(Integer, primary_key=True)
name = Column(Text, unique=True)
data = Column(Integer)
def __init__(self, name, data):
self.name = name
self.data = data
这就是创建引擎的地方:
def main(argv=sys.argv):
if len(argv) != 2:
usage(argv)
config_uri = argv[1]
setup_logging(config_uri)
settings = get_appsettings(config_uri)
engine = engine_from_config(settings, 'sqlalchemy.')
DBSession.configure(bind=engine)
Base.metadata.create_all(engine)