我在使用的SQLAlchemy與PySide(PyQt的)問題。我試圖彈出一個QtGui.QDialog
,但是當我這樣做的SQLAlchemy拋出異常:SQLAlchemy的IntegrityError
Traceback (most recent call last):
File "C:\Python27\lib\site-packages\preo\preodb\dbviewandmodel.py", line 32, in rowCount
return len(self.rows())
File "C:\Python27\lib\site-packages\preo\preodb\dbviewandmodel.py", line 30, in rows
return self.tableobj.query.all()
File "C:\Python27\lib\site-packages\sqlalchemy-0.6.6-py2.7.egg\sqlalchemy\orm\query.py", line 1579, in all
return list(self)
File "C:\Python27\lib\site-packages\sqlalchemy-0.6.6-py2.7.egg\sqlalchemy\orm\query.py", line 1688, in __iter__
self.session._autoflush()
File "C:\Python27\lib\site-packages\sqlalchemy-0.6.6-py2.7.egg\sqlalchemy\orm\session.py", line 862, in _autoflush
self.flush()
File "C:\Python27\lib\site-packages\sqlalchemy-0.6.6-py2.7.egg\sqlalchemy\orm\session.py", line 1388, in flush
self._flush(objects)
File "C:\Python27\lib\site-packages\sqlalchemy-0.6.6-py2.7.egg\sqlalchemy\orm\session.py", line 1469, in _flush
flush_context.execute()
File "C:\Python27\lib\site-packages\sqlalchemy-0.6.6-py2.7.egg\sqlalchemy\orm\unitofwork.py", line 302, in execute
rec.execute(self)
File "C:\Python27\lib\site-packages\sqlalchemy-0.6.6-py2.7.egg\sqlalchemy\orm\unitofwork.py", line 446, in execute
uow
File "C:\Python27\lib\site-packages\sqlalchemy-0.6.6-py2.7.egg\sqlalchemy\orm\mapper.py", line 1878, in _save_obj
execute(statement, params)
File "C:\Python27\lib\site-packages\sqlalchemy-0.6.6-py2.7.egg\sqlalchemy\engine\base.py", line 1191, in execute
params)
File "C:\Python27\lib\site-packages\sqlalchemy-0.6.6-py2.7.egg\sqlalchemy\engine\base.py", line 1271, in _execute_clauseelement
return self.__execute_context(context)
File "C:\Python27\lib\site-packages\sqlalchemy-0.6.6-py2.7.egg\sqlalchemy\engine\base.py", line 1302, in __execute_context
context.parameters[0], context=context)
File "C:\Python27\lib\site-packages\sqlalchemy-0.6.6-py2.7.egg\sqlalchemy\engine\base.py", line 1401, in _cursor_execute
context)
File "C:\Python27\lib\site-packages\sqlalchemy-0.6.6-py2.7.egg\sqlalchemy\engine\base.py", line 1394, in _cursor_execute
context)
File "C:\Python27\lib\site-packages\sqlalchemy-0.6.6-py2.7.egg\sqlalchemy\engine\default.py", line 299, in do_execute
cursor.execute(statement, parameters)
sqlalchemy.exc.IntegrityError: (IntegrityError) ('23000', "[23000] [Microsoft][ODBC
SQL Server Driver][SQL Server]Violation of UNIQUE KEY
constraint 'UQ__users__F3DBC5720DAF0CB0'. Cannot insert duplicate key in
object 'dbo.users'. (2627) (SQLExecDirectW); [01000] [Microsoft][ODBC SQL Server
Driver][SQL Server]The statement has been terminated. (3621)") u'INSERT INTO users
(username, fullname, email, passwordmd5) OUTPUT inserted.id VALUES (?, ?, ?, ?)'
(None, None, None, None)
這是特別麻煩,因爲我沒有代碼,任何地方,甚至試圖將記錄插入到SQL;我只是試圖從數據庫中查詢數據。事實上,我的數據庫模型是隻讀的就什麼PySide/PyQt的正在做的(即,我使用QtGui.QTableView
模型/視圖並且在該模型沒有insertRows
功能)。
我不知道發生什麼事或如何解決它 - 再一次,我沒有代碼來修改SQL記錄,但仍然SQLAlchemy試圖插入空白記錄到我的SQL表之一。我只能在後臺看到QTableView
數據模型正在查詢數據庫A LOT。這似乎只是當我跳出這個QDialog
(裏面確實有一些代碼在它來查詢一些表列)引發此錯誤。奇怪的是,這是不一致的,有時候彈出窗口會先出現在異常之前,有時彈出窗口會出現在異常之後。在正常情況下,該QTableView
數據模型的偉大工程,只是沒有當我彈出此對話框(諷刺的是,彈出沒有使用任何QTableView
可言,只是標準的小部件一樣QLineEdit的,的QTextEdit等)
如果幫助,我使用Python 2.7使用SQLAlchemy的0.6.6(也與靈藥0.7.1),和PySide 1.0.0(和PyQt4的4.8.3)。我在使用SQL 2008 R2(Express)的Windows 7上。是的,我試過重新啓動電腦,但重新啓動後問題仍然存在。我不願意發佈更多的代碼,因爲我在這個特定的項目中有很多這樣的代碼,並且我無法確定具體的問題。
我希望有人會知道SQLAlchemy的和/或PyQt的怪事,可能與此有關的。我也希望我可以繼續使用SQLAlchemy,因爲我建立了一個大型數據模型;在這一點上,我不情願放棄這個並使用PyQt的SQL特性。
select語句可能沒有做任何事情,但在查詢之前可能會發生某些情況。當查詢運行時,它將刷新仍然要做的任何更改(例如插入用戶)。我們能否看到「dbviewandmodel.py」文件的其餘部分? – 2011-03-17 00:44:12
當發生這種情況時,我仍然沒有做任何類型的數據庫修改(沒有插入,沒有對該數據庫中的任何數據進行編輯),只是查詢數據。我想我已經找到了一種不讓這種崩潰發生的方式(不是真正的修復,更像是,我可以通過不做某些特定的事情來實現它)。我會添加一個答案,因爲它有點冗長。 – Raceyman 2011-03-17 15:03:17