2

我正在使用带有烧瓶的 SQLalchemy 与 sql server 进行交互。我已经为表启用了系统版本控制。在应用程序运行后执行第一个查询以插入或更新表时,sysstarttime 得到更新,但在下一个后续插入或更新操作中,sysstarttime 不会更新..如果其他一些正在运行的烧瓶应用程序,它仍然显示较旧的事务时间尝试更新它引发错误的行“系统版本化表的数据修改失败”

我用于创建表的查询:

CREATE TABLE dbo.table(
    ScanSubscriptionID NOT NULL PRIMARY KEY,
    UserName varchar(20) NOT NULL,
    SysStartTime DATETIME2 GENERATED ALWAYS AS ROW START NOT NULL,
    SysEndTime DATETIME2 GENERATED ALWAYS AS ROW END NOT NULL,
    PERIOD FOR SYSTEM_TIME (SysStartTime, SysEndTime)
)
WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.table));

这是我的应用程序的代码:

import urllib
from flask import Flask
from datetime import datetime
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
connection_string =\
    urllib.parse.quote_plus('Driver={ODBC Driver 17 for SQL Server};Server=localhost\MSSQLSERVER01;Database=db_Data;Trusted_Connection=yes;')
connection_string = "mssql+pyodbc:///?odbc_connect=%s" % connection_string
app.config['SQLALCHEMY_DATABASE_URI'] = connection_string
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
session_option = {
    'autocommit': True
}
db = SQLAlchemy(app, session_options=session_option)
db.init_app(app)
session1 = db.session
@app.route('/')
def testdb():
    try:
        session1.begin()
        session1.execute("update [table] set UserName = 'Ksing' where ScanSubscriptionID = 1600336614")
        session1.commit()
        return '<h1>It works.</h1>'
    except Exception as e:
        raise e
    finally:
        print(f'Time is  :{datetime.utcnow()}')
        #session1.close()


if __name__ == '__main__':
    app.run(debug=True)
4

0 回答 0