我有一条插入语句。
conn = sqlite3.connect('WO1.db')
with conn:
cur1 = conn.cursor()
cur1.execute("insert into workorder (Title, Link, Status)
values (?,?,?)", ('iijiji', 'ijjijijj', '22jhhuhij'))
if conn:
conn.close()
title和link列具有唯一约束,我遇到以下错误,程序终止。
sqlite3.IntegrityError: UNIQUE constraint failed:
但是我想要的是将1条新记录插入数据库。
然后我创建了一个新表,其中Title和Link列没有UNIQUE约束。
我再次运行该程序,这次没有收到任何错误,但是,该记录被两次插入到表中,当链接和标题上存在UNIQUE约束时,就会解释该错误。
关于此insert语句为什么执行两次,是否有任何逻辑解释?
注意这只是程序中建立连接,执行查询然后关闭连接的一个位置。除了常规配置外,程序中与该数据库没有其他交互。
除了在此应用程序内,我没有与此数据库打开任何其他会话。
我正在运行程序的python文件中运行此查询。
app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app)
conn = sqlite3.connect('WO1.db')
with conn:
cur1 = conn.cursor()
cur1.execute("insert into workorder (Title, Link, Status) values
(?,?,?)", ('en24433', 'www.reddit.com', 'Not Completed'))
if conn:
conn.close()
migrate = Migrate(app, db)
@app.route('/')
def index():
return render_template('index.html')
if __name__ == '__main__':
app.run(host='localhost', port=8080, debug= True)
答案 0 :(得分:0)
您需要重新制作数据库访问代码。
首先,您在with
之后使用conn.connect()
语句在同一数据库连接两次。
当通过多个连接访问数据库,并且其中一个进程修改了数据库时,SQLite数据库将被锁定,直到提交该事务为止。
我认为这是造成您错误的原因。
在数据库中插入后,需要提交更改。
此方法提交当前事务。如果不调用此方法,则从其他数据库连接中看不到自上次调用commit()以来所做的一切。如果您想知道为什么看不到已写入数据库的数据,请检查您是否没有忘记调用此方法。
请注意, close()不会自动提交:
这将关闭数据库连接。请注意,这不会自动调用commit()。如果您只关闭数据库连接而没有先调用commit(),则更改将丢失!
答案 1 :(得分:0)
当我将数据库连接并在语句路由中而不是在路由之上插入语句时,它起作用了。
self.acceptButton.setImage(UIImage(named: image), for: UIControl.State.normal)
self.acceptButton.semanticContentAttribute = .forceRightToLeft
self.acceptButton.imageEdgeInsets = UIEdgeInsets(top: 0, left: 9, bottom: 0, right: 0)