postgresql - PyQt,如何检查数字数组是否具有特定长度

标签 postgresql pyqt

我正在将我的 PyQt 代码与我的 PostgreSQL 链接起来,在 PostgreSQL 中我将某​​些列设置为 NUMERIC(11,0) 类型,但现在我想将其限制为正好 11 位数字,因为 NUMERIC( 11,0) 表示最多 11 位。

class kirurg_GUI(QtGui.QWidget, Ui_kirurg_Widget):
       def __init__(self):
              QtGui.QWidget.__init__(self)
              self.setupUi(self)
              self.kirurg_Add_button.clicked.connect(self.insert_kirurg)

       def insert_kirurg(self):
              oib_kir = self.kirurg_oib_kir_lineEdit.text()
              if not oib_kir:
                     QtGui.QMessageBox.critical(self, 'Query error', 'oib_kir must not be empty')

              else: 
                     query = QSqlQuery()
                     status = query.exec("INSERT INTO kirurg (oib_kir, prezime, ime, adresa, broj_telefona)"
                                         "VALUES ('%s', '%s', '%s', '%s', '%s')" % (''.join(self.kirurg_oib_kir_lineEdit.text()),
                                                                                    ''.join(self.kirurg_prezime_lineEdit.text()),
                                                                                    ''.join(self.kirurg_ime_lineEdit.text()),
                                                                                    ''.join(self.kirurg_adresa_lineEdit.text()),
                                                                                    ''.join(self.kirurg_broj_telefona_lineEdit.text())))
                     if status is not True:
                            errorText = query.lastError().text()
                            QtGui.QMessageBox.critical(self, 'Query error', errorText)

                     else:
                            msgBox = QtGui.QMessageBox()
                            msgBox.setWindowTitle("Kirurg")
                            msgBox.setText("Data entered successfully")
                            msgBox.exec_()
                            kirurg.close()

这是我在我的数据库中添加值的部分代码。

这一行:

''.join(self.kirurg_oib_kir_lineEdit.text()

的长度应恰好为 11 位数字。我已经涵盖了最大大小和数字类型,但现在我想将其限制为确切的位数。

谢谢!

最佳答案

您可以使用 QLineEdit.setInputMask (self, QString inputMask)只设置号码。阅读here配置它们。

class kirurg_GUI (QtGui.QWidget, Ui_kirurg_Widget):
    def __init__ (self):
        QtGui.QWidget.__init__(self)
        self.setupUi(self)
        self.kirurg_Add_button.clicked.connect(self.insert_kirurg)
        maxLength = 11                                                      # <- Add length
        self.kirurg_oib_kir_lineEdit.setInputMask(('9' * maxLength) + ';_') # <- Set input mask
        self.kirurg_oib_kir_lineEdit.setMaxLength(maxLength)                # <- Set max length

    def insert_kirurg (self):
        oib_kir = self.kirurg_oib_kir_lineEdit.text()
        if not oib_kir:
            QtGui.QMessageBox.critical(self, 'Query error', 'oib_kir must not be empty')
        if len(str(oib_kir)) != self.kirurg_oib_kir_lineEdit.maxLength():                   # Check digit length
            QtGui.QMessageBox.critical(self, 'Query error', 'oib_kir must not be 11 diget') # Not 11 digit ? Error!
        else:
            query = QSqlQuery()
            status = query.exec("INSERT INTO kirurg (oib_kir, prezime, ime, adresa, broj_telefona)"
                                "VALUES ('%s', '%s', '%s', '%s', '%s')" % (''.join(self.kirurg_oib_kir_lineEdit.text()),
                                                                           ''.join(self.kirurg_prezime_lineEdit.text()),
                                                                           ''.join(self.kirurg_ime_lineEdit.text()),
                                                                           ''.join(self.kirurg_adresa_lineEdit.text()),
                                                                           ''.join(self.kirurg_broj_telefona_lineEdit.text())))
            if status is not True:
                errorText = query.lastError().text()
                QtGui.QMessageBox.critical(self, 'Query error', errorText)
            else:
                msgBox = QtGui.QMessageBox()
                msgBox.setWindowTitle("Kirurg")
                msgBox.setText("Data entered successfully")
                msgBox.exec_()
                kirurg.close()

关于postgresql - PyQt,如何检查数字数组是否具有特定长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25690412/

相关文章:

postgresql - 通过 psql 运行 SQL 脚本会出现 PgAdmin 中不会出现的语法错误

python - 访问 QComboBox 索引值

python-2.7 - 这是 PyQt 4 python 错误还是行为错误的代码?

python - 如何从一个类发出 Qtsignal,从而导致在 pyqt 中从其父类发出 Qtsignal

python - 如何将 Qt Quick 中的按钮绑定(bind)到 Python PyQt 5

java - Hibernate注释@OnetoOne似乎并没有限制数据库中的多对一条目

sql - 存储过程没有数据输出(Postgresql)

python - PyQt5 使用 keyPressEvent() 触发 paintEvent()

sql - Postgres upsert 使用来自 select 的结果

sql - 限制每个组的行数从连接(不是 1 行)