我是 Python 和 PyQt 的新手。我想知道如何使用 PyQt 连接到 Postgresql DB 并将其显示到网格窗口。我正在使用 Qt 设计器。有人可以帮我吗?谢谢你。
最好的问候, 内森
我是 Python 和 PyQt 的新手。我想知道如何使用 PyQt 连接到 Postgresql DB 并将其显示到网格窗口。我正在使用 Qt 设计器。有人可以帮我吗?谢谢你。
最好的问候, 内森
PyQt 具有数据库支持(我个人没有使用过,所以我无法评论),但如果你查看 QDatabase,它应该是非常简单的文档。如果您的应用程序的 api 始终可以访问 Qt,这可能是最好的方法,因为它们还有一些用于映射到接口的附加模型。
另一种选择是使用 Python ORM(对象关系映射器),例如 Django、SQLAlchemy 或storm,并定义您的表(模型)并将它们手动加载到您的设计器界面中。
我个人的做法是,我实际上构建了自己的 ORM,称为 ORB 和一个 PyQt 扩展库,称为 ProjexUI。ORB 库独立于 Qt,因此可以在非 Qt 项目中使用,ProjexUI 库包含映射以帮助在 Qt 小部件中使用数据库记录。
有关文档和更多信息,请查看: http: //www.projexsoftware.com
对于一个简单的示例,通过执行以下操作创建一个新的 UI 文件:
这将创建 PyQt 接口部分,接下来您仍需要将接口连接到数据库后端。如何使用 ORB 执行此操作的最简单示例是:
# import the projexui and orb libraries
import projexui
import orb
# import PyQt modules
import PyQt4.QtGui
import PyQt4.uic
# create our database model
class User(orb.Table):
__db_columns__ = [
orb.Column( orb.ColumnType.String, 'username' ),
orb.Column( orb.ColumnType.String, 'password' ),
orb.Column( orb.ColumnType.Boolean, 'isActive' )
]
# the above model will by default create a PostgreSQL table called default_user with
# the fields _id, username, password and is_active. All of this is configurable, but
# you should read the docs for more info
# create the database information
db = orb.Database('Postgres', DATABASE_NAME) # set your db name
db.setUsername(USER_NAME) # set your db user name
db.setPassword(PASSWORD) # set your password
db.setHost('localhost') # set your host
db.setPort(5432) # set your port
# register the database
orb.Orb.instance().registerDatabase(db)
# sync the datbase (this will create your tables, update columns, etc.)
# NOTE: this should not always be called, it is here as an example
db.sync( dryRun = False ) # dryRun will just output the SQL calls
#-----------------------------
# End Database Code
#-----------------------------
class ExampleDialog(QtGui.QDialog):
def __init__( self, parent = None ):
super(ExampleDialog, self).__init__(parent)
# load your UI file
PyQt4.uic.loadUi(UI_FILE, self) # use the UI_FILE you saved
# connect the tree to the model
self.uiOrbTREE.setTableType(User)
# that is all you have to do to link the tree to the model and vice-versa,
# this is the most simple example of how to do this - you can do more as far
# as linking queries and sorting and such, but you should read the docs on
# the site
# launch as an application
if ( __name__ == '__main__' ):
# always check for an existing application first!
app = None
if ( not QtGui.QApplication.instance() ):
app = QtGui.QApplication(sys.argv)
dialog = ExampleDialog()
dialog.show()
# execute the app if we created it
if ( app ):
app.exec_()