<div dir="ltr"><div class="gmail_default" style="font-family:tahoma,sans-serif">​</div><div class="gmail_extra"><br><div class="gmail_quote">On 30 March 2018 at 16:48, Ricardo Araoz <span dir="ltr"><<a href="mailto:ricaraoz@gmail.com" target="_blank">ricaraoz@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;padding-left:1ex;border-left-color:rgb(204,204,204);border-left-width:1px;border-left-style:solid">Are there any methods for multiuser database programming while working with models and mappers? I mean, something to lock/unlock records and/or tables (not talking about transactions) and something that will tell me when saving if the database records to be updated have been changed since the model read them.<br>
<br>
TIA<br>
<br>
______________________________<wbr>_________________<br>
PyQt mailing list    <a href="mailto:PyQt@riverbankcomputing.com" target="_blank">PyQt@riverbankcomputing.com</a><br>
<a href="https://www.riverbankcomputing.com/mailman/listinfo/pyqt" target="_blank" rel="noreferrer">https://www.riverbankcomputing<wbr>.com/mailman/listinfo/pyqt</a></blockquote></div><br><div class="gmail_default" style="font-family:tahoma,sans-serif">​Hi Ricardo,</div><div class="gmail_default" style="font-family:tahoma,sans-serif"><br></div><div class="gmail_default" style="font-family:tahoma,sans-serif">I am not a PyQt expert person --- just someone using it.</div><div class="gmail_default" style="font-family:tahoma,sans-serif"><br></div><div class="gmail_default" style="font-family:tahoma,sans-serif">I would say basically "no".  ​<font face="monospace,monospace">QSqlRelationalTableModel </font><span class="gmail-J-J5-Ji" id="gmail-:a9"></span>is just a thin layer over <font face="monospace,monospace">QSqlTableModel</font>, and that's just <font face="monospace,monospace">QSqlTableQuery</font>/<font face="monospace,monospace">QSqlQuery </font>with some support for putting it in a table and allowing you to specify <font face="monospace,monospace">INSERT</font>/<font face="monospace,monospace">DELETE</font>/<font face="monospace,monospace">UPDATE </font>commands.  Other than that you're really on your own to add your own stuff.</div><div class="gmail_default" style="font-family:tahoma,sans-serif"><br></div><div class="gmail_default" style="font-family:tahoma,sans-serif">The usual way to handle "multiuser" is to make your <font face="Courier New">DELETE</font>/<font face="monospace,monospace">UPDATE </font><span class="gmail-J-J5-Ji" id="gmail-:a9">statements do <em>optimistic </em>updates, i.e. you add a <font face="monospace,monospace">WHERE</font> clause to verify all the values in the database are the same as when you read the row in, else someone else has changed it and then you error.  That's instead of <em>pessimistic</em> locking, where you lock the row when you read it, which doesn't scale.  You could implement these yourself.</span></div><div class="gmail_default" style="font-family:tahoma,sans-serif"><span class="gmail-J-J5-Ji"><br></span></div><div class="gmail_default" style="font-family:tahoma,sans-serif"><span class="gmail-J-J5-Ji">Otherwise, this isn't a PyQt/Python question, so if you want to discuss in detail or see if Qt experts have more to offer than I have you might like to join up to <a href="https://forum.qt.io/">https://forum.qt.io/</a> and come pose your question there.</span></div><div class="gmail_default" style="font-family:tahoma,sans-serif"><span class="gmail-J-J5-Ji"><br>-- <br></span></div><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><span style="font-family:tahoma,sans-serif">Kindest,</span></div><div><span style="font-family:tahoma,sans-serif">Jonathan</span></div></div></div></div></div>
</div></div>