text: ############################################################################
  ##
  ## Copyright (C) 2016 The Qt Company Ltd.
  ## Contact: https://www.qt.io/licensing/
  ##
  ## This file is part of the examples of Qt for Python.
  ##
  ## $QT_BEGIN_LICENSE:BSD$
  ## Commercial License Usage
  ## Licensees holding valid commercial Qt licenses may use this file in
  ## accordance with the commercial license agreement provided with the
  ## Software or, alternatively, in accordance with the terms contained in
  ## a written agreement between you and The Qt Company. For licensing terms
  ## and conditions see https://www.qt.io/terms-conditions. For further
  ## information use the contact form at https://www.qt.io/contact-us.
  ##
  ## BSD License Usage
  ## Alternatively, you may use this file under the terms of the BSD license
  ## as follows:
  ##
  ## "Redistribution and use in source and binary forms, with or without
  ## modification, are permitted provided that the following conditions are
  ## met:
  ##   * Redistributions of source code must retain the above copyright
  ##     notice, this list of conditions and the following disclaimer.
  ##   * Redistributions in binary form must reproduce the above copyright
  ##     notice, this list of conditions and the following disclaimer in
  ##     the documentation and/or other materials provided with the
  ##     distribution.
  ##   * Neither the name of The Qt Company Ltd nor the names of its
  ##     contributors may be used to endorse or promote products derived
  ##     from this software without specific prior written permission.
  ##
  ##
  ## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  ## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  ## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  ## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  ## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  ## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  ## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  ## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  ## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
  ##
  ## $QT_END_LICENSE$
  ##
  ############################################################################
  
  from PySide2.QtGui import *
  from PySide2.QtSql import *
  
  def initializeModel(model):
  //! [0]
      model.setTable("employee")
  //! [0]
  
      model.setEditStrategy(QSqlTableModel.OnManualSubmit)
  //! [1]
      model.setRelation(2, QSqlRelation("city", "id", "name"))
  //! [1] //! [2]
      model.setRelation(3, QSqlRelation("country", "id", "name"))
  //! [2]
  
  //! [3]
      model.setHeaderData(0, Qt.Horizontal, QObject::tr("ID"))
      model.setHeaderData(1, Qt.Horizontal, QObject::tr("Name"))
      model.setHeaderData(2, Qt.Horizontal, QObject::tr("City"))
      model.setHeaderData(3, Qt.Horizontal, QObject::tr("Country"))
  //! [3]
  
      model.select()
  
  
  def createView(title, model):
  //! [4]
      view =  QTableView()
      view.setModel(model)
      view.setItemDelegate(QSqlRelationalDelegate(view))
  //! [4]
      view.setWindowTitle(title)
      return view
  
  
  def createRelationalTables():
      query = QSqlQuery()
      query.exec_("create table employee(id int primary key, name varchar(20), city int, country int)")
      query.exec_("insert into employee values(1, 'Espen', 5000, 47)")
      query.exec_("insert into employee values(2, 'Harald', 80000, 49)")
      query.exec_("insert into employee values(3, 'Sam', 100, 1)")
  
      query.exec_("create table city(id int, name varchar(20))")
      query.exec_("insert into city values(100, 'San Jose')")
      query.exec_("insert into city values(5000, 'Oslo')")
      query.exec_("insert into city values(80000, 'Munich')")
  
      query.exec_("create table country(id int, name varchar(20))")
      query.exec_("insert into country values(1, 'USA')")
      query.exec_("insert into country values(47, 'Norway')")
      query.exec_("insert into country values(49, 'Germany')")
  
  
  def main():
  
      app = QApplication([])
      if !createConnection():
          return 1
  
      createRelationalTables()
  
      model = QSqlRelationalTableModel()
  
      initializeModel(model)
  
      view = createView(QObject.tr("Relational Table Model"), model)
      view.show()
  
      return app.exec_()
  
  