目前我有一個表在我的數據庫id,名稱(str),和數據(int)列。還有就是選擇一個按鈕,增加了1到數據庫中的相應條目的HTML單選按鈕形式:從sqlite3數據庫表單提交sqlalchemy行更新不一致行爲
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)
我不明白:你正在做隨機生成的數字過濾,並想知道爲什麼你的代碼有非確定性的行爲。但我並沒有真正理解代碼,不能完全評論發生了什麼。 –
是的,它的奇怪。我試過http:// stackoverflow。COM /問題/ 19507467 /何燦我選-2不同,隨機行從 - 一個表,但是你可以看到我爲什麼改變了它 – BigBoy1337
只輸出正在運行看實際的SQL查詢你」重新發送到數據庫。然後將該查詢與數據庫中的數據進行比較。答案將是非常明顯的 –