zoukankan      html  css  js  c++  java
  • pyqt5-----postgresql数据库使用

    上一章解决了无法加载postgresql数据库的问题

    1.打开数据from PyQt5 import QtWidgets,QtSql,QtCoreimport sys

    app =QtCore.QCoreApplication([])


    dblists = QtSql.QSqlDatabase.drivers()
    print(dblists)

    conn = QtSql.QSqlDatabase.addDatabase("QMYSQL")
    conn.setHostName('localhost')
    conn.setDatabaseName('db_blog')
    conn.setUserName('root')
    conn.setPassword('123456')

    isok = conn.open()
    print(isok)
    db = QtSql.QSqlDatabase.addDatabase("QPSQL")
    db.setHostName("localhost")
    db.setDatabaseName("map_info")
    db.setUserName("postgres")
    db.setPassword("123")
    ok = db.open()
    print(ok)

    使用QtSql.QSQlDatabase.addDatabase()方法来添加数据库连接,并进行信息配置
    以下为其对应的方法:

    ddDatabase()方法返回一个QSqlDatabase类的实例,它表示建立连接的数据库。 QSqlDatabase方法有(详见http://doc.qt.io/qt-5/qsqldatabase.html):

    • setHostName(QString host):设置数据库的主机。
    • setPort(int port):设置连接数据库的主机商品。
    • setDatabaseName(QString name): 设置数据库名称、目录(sqlite数据库)或连接串(ODBC);
    • setUserName(QString name): 设置访问数据库的用户名;
    • setPassword(QString name): 设置访问数据库对应用户名的密码;
    • setConnectOptions(QString options = ''):该函数要在连接打开之前调用。对不同数据库可设的参数值请参考(http://pyqt.sourceforge.net/Docs/PyQt4/qsqldatabase.html#setConnectOptions)
    • open() 或open(QString user, QString password) :打开数据库,如果成功返回True,否则返回False.

        注意!

        在创建到数据库的连接之前,应该创建一个应用程序对象(QApplication对象的一个实例)。 如果没有这样做,PyQt将无法下载指定数据库格式的驱动程序,也不会创建连接。
        要打开的数据库必须已经存在于磁盘或服务器上。 唯一的例外是SQLite数据库,如果打开时不存在,将动自动创建。
    • isOpen():如果数据库已打开,返回True;否则,返回False。
    • isOpenError(): 如果打开数据库连接时发生错误,返回True; 否则返回False。 可以使用lastError()读取错误信息。
    • transaction(): 在数据库上开始一个事务。 如果操作成功,则返回true。 否则,它返回false。
    • commits(): 如果驱动程序支持事务并且transaction()已经启动,则向数据库提交事务。 如果操作成功,则返回true。 否则,返回false。
    • rollback():如果驱动程序支持事务并且transaction()已经启动,则向数据库提出取消事务。 如果操作成功,则返回true。 否则,返回false。
    • lastError():返回QSqlError实例,为数据库时发生的最后一个错误的信息。
    • connectionName():返回数据库连接信息。
    • tables ([QSql.TableType type = QSql.Tables]):返回数据库表list. type参数可为:
      • QSql.Tables,0x01:所有用户表
      • QSql.SystemTables,0x02:内部表
      • QSql.Views,0x04:所表用户视图
      • QSql.AllTables,0xff:用户表、内部表和用户视图
    • record ( QString tablename):返回一个 QSqlRecord 实例,包含表名为tablename的表结构。
    • primaryIndex(): 返回一个 QSqlIndex 实例,包含表名为tablename的主索引。
    • close():关闭数据库连接。

        除了addDatabase()静态方法外,QSqlDatabase类还有以下静态方法:

    •  contains (QString connectionName = '']):如果数据库连接列表包含connectionName,则返回true; 否则返回false。

    •  connectionNames(): 返回包含所有连接名称的列表。

    • database (QString connectionName = '', bool open = True):返回名为connectionName的数据库连接。 数据库连接必须是已经用addDatabase()添加的连接。 如果参数open为True(默认),并且数据库连接尚未打开,则调用此函数时会打开。 如果没有指定connectionName,则使用默认连接。 如果connectionName在数据库列表中不存在,则返回无效的连接。

    •  cloneDatabase (QSqlDatabase other, QString connectionName):克隆other数据库连接,连接名为connectionName。  

    • removeDatabase(QString connectionName):从数据库连接列表中删除connectionName数据库连接。

    • isDriverAvailable(QString name):name驱动存在,返回True;否则,返回False.

    • drivers():返回所有可用数据库驱动程序的列表。

    查询表中的信息

       通过调用QSqlDatabase类的record()获取表结构的信息。 该函数返回一个QSqlRecord类实例。QSqlRecord类的方法有(详见http://doc.qt.io/qt-5/qsqlrecord.html):
    • count():返回表的字段数;
    • fieldName(int index):返回index索引处的字段名称。 如果该字段不存在,则返回一个空字符串;
    • field(int index ):返回index索引处的字段,即一个QSqlField实例;
    • field(QString name):返回字段名为name的字段,即一个QSqlField实例;
    • indexOf(QString name): 返回字段名为name的索引值。如果有不存在此字段,返回-1;
    • contains(QString name): 如果表中有name字段,返回True;否则返回False;
    • isEmpty(): 如果表中没有任何字段,返回True;否则返回False
    table_stru = conn.record('t_blog')
    print(table_stru.field('id'))查询表t_bolg,返回字段名为id的字段,即一个QSqlField实例

    获取字段的特定信息
        通过QSqlRecord类的field()字段的信息。 该函数返回一个QSqlField类实例,方法有(详见http://doc.qt.io/qt-5/qsqlfield.html):
    • name():返回字段名称;
    • type():返回字段类型为QVariant类(详见http://doc.qt.io/qt-5/qvariantobsolete.htmI#Type-enum):
      • Invalid:非法类型
      • Bool:逻辑型
      • Char:字符型
      • Date:日期型
      • DateTime:日期时间型
      • Double:双精度型
      • Int和Long:整数型
      • String:字符串型
      • Time:时间型
      • UInt和ULongLong:无符号字符型
    • length(): 字段长度;
    • precision():字段精度
    • defaultValue():字段默认值
    • requiredStatus():返回字段是否必填。1:插入记录时必填;0:插入记录时,可选填;-1:无法确定是否必填。
    • isAutoValue():如果是字段值是自动生成,返回True;否则返回False;
    • isReadOnly():如果是只读字段,返回True;否则返回False;

        2.3 获取索引的有关信息

        通过QSqiDatabase类的primaryIndex()返回一个QSqlIndex类实例,此类是QSqlRecord的子类,方法有(详见http://doc.qt.io/qt-5/qsqlindex.html):
    • name():索引名称
    • isDescending(int i): 如果字段i索引按降序排序,则返回true; 否则返回false。
        2.4 读取数据库操作错误的信息
        PyQt5中用QSqlError类实例记录数据库操作过程中的错误信息。QSqlError类的方法有:
    • type():返回错误信息类型的枚举类型(QSqlError.ErrorType),
      • NoError:没有错误
      • ConnectionError:连接错误
      • StatementError:SQL语言错误
      • TransactionError:事务错误
      • UnknownError:未知错误
    • text():返回databaseText() 返回值和 driverText() 返回值的连接字符串。
    • databaseText():返回数据库出错信息。
    • driverText():返回驱动出错信息。
    • nativeErrorCode():返回数据库的原始错误代码。
  • 相关阅读:
    循序渐进学习XHTML
    一些常用正则表达式
    输入框限制
    Oracle 取随机数
    安装部署中的数据库打包和快捷方式启动浏览器
    游标小例
    查询列数
    临时表简介
    Update动态更新
    sql 多列转一列
  • 原文地址:https://www.cnblogs.com/icat-510/p/10184903.html
Copyright © 2011-2022 走看看