[PyQt] Postgresql and QDataWidgetMapper.submit() error on timestamp	field
    Dave Kelly 
    dave at theprioryinn.co.uk
       
    Thu Dec 10 12:35:13 GMT 2015
    
    
  
Hi,
 
I am stuck making a data driven application using PyQt5 and Postgresql.
Background information
 
PyQt version '5.2.1' installed from the repositories on Linux Mint 17.2 64
bit Cinnamon
Postgresql 9.3
 
When I try to submit from a QDataWidgetMapper it doesn't seem to like the
timestamp data type.  The error message I get from model.lasterror().text()
gives me
 
ERROR:  invalid input syntax for type timestamp: 
LINE 1: EXECUTE qpsqlpstmt_1 ('', email at email.com, '350404...
                              ^
(22007) QPSQL: Unable to create query
 
My quesitons are:
 
1. could I have found a PyQt/Qt bug?
2. how can I see the exact SQL statement it is trying to use when I submit?
 
Table structure:
 
booking_id         1              character varying
checked_in         2              timestamp without time zone
checked_out     3              timestamp without time zone
hotel_id               4              character varying
id            5              character varying
label      6              character varying
departure_date               7              date
arrival_date        8              date
num_adults        9              integer
num_children    10           integer
room_id               11           character varying
room_type_id   12           character varying
address                13           character varying
reference            14           character varying
notes    15           text
email     16           character varying
corporation_id  17           bigint
cancelled             18           timestamp without time zone
 
code:
# -*- coding: utf-8 -*-
 
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtSql import *
from PyQt5.QtWidgets import *
import sys
from ci_co_table5 import *
from guest_info_form5 import *
 
BOOKING_ID = 0
CHECKED_IN = 1
CHECKED_OUT = 2
HOTEL_ID = 3
ID = 4
LABEL = 5
DEPARTURE_DATE = 6
ARRIVAL_DATE = 7
NUM_ADULTS = 8
NUM_CHILDREN = 9
ROOM_ID = 10
ROOM_TYPE_ID = 11
ADDRESS = 12
REFERENCE = 13
NOTES = 14
EMAIL = 15
CORPORATION_ID = 16
CANCELLED = 17
      
class Guest_form(QDialog, Ui_guest_info_form):
    def __init__(self, res_id, parent=None):
        QDialog.__init__(self)
        self.ui = Ui_guest_info_form()
        self.ui.setupUi(self)
        self.guest_model = QSqlTableModel(self)
        self.guest_model.setTable("bookings")
        self.guest_model.setFilter("id = '{0}'".format(res_id))
        self.guest_model.select()        
        print(self.guest_model.record(0).value("label"))
        print(self.guest_model.record(0).value(0))
        self.mapper = QDataWidgetMapper(self)
        self.mapper.setSubmitPolicy(QDataWidgetMapper.ManualSubmit)
        self.mapper.setModel(self.guest_model)
        self.mapper.addMapping(self.ui.book_label,LABEL)
        self.mapper.addMapping(self.ui.booking_id,BOOKING_ID)
        self.mapper.addMapping(self.ui.ci_co,CHECKED_IN)
        self.mapper.addMapping(self.ui.arrival_date,ARRIVAL_DATE)
        self.mapper.addMapping(self.ui.departure_date,DEPARTURE_DATE)
        self.mapper.addMapping(self.ui.guest_email,EMAIL)
        self.mapper.addMapping(self.ui.adults,NUM_ADULTS)
        self.mapper.addMapping(self.ui.kids,NUM_CHILDREN)
        self.mapper.toFirst()
        
        btn = self.ui.save_record
        btn.clicked.connect(self.update_record)
        
    def update_record(self):
        #QMessageBox.warning(self, "update record", "Update record")
        row  = self.mapper.currentIndex()
        submit = self.mapper.submit()
        print("mapper: ", submit)
        if submit == False:
            print(self.guest_model.lastError().text())
         
if __name__=="__main__":
    app=QApplication(sys.argv)
    #Database stuff
    db = QSqlDatabase.addDatabase("QPSQL");
    db.setHostName("hostname")
    db.setDatabaseName("pms");
    db.setUserName("username");
    db.setPassword("password");
    if (db.open()==False):     
        QMessageBox.critical(None, "Database Error", db.lastError().text())
    res_id = "350404"
    myapp = Guest_form(res_id)
    myapp.show()
    sys.exit(app.exec_())
 
 
Dave Kelly
The Priory Inn <http://theprioryinn.co.uk/> 
01666 502 251
London Road, Tetbury, GL8 8JJ
"Dining in a 30 mile food zone"
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.riverbankcomputing.com/pipermail/pyqt/attachments/20151210/9241206f/attachment.html>
    
    
More information about the PyQt
mailing list