在企业信息化应用中,数据库的使用是不可避免的需求。而在Python中,使用PyQt框架可以很方便地实现数据库绑定功能,简化了开发者的工作,提高开发效率。本文将介绍的实现方法。
一、Python PyQt与数据库
Python PyQt是Python语言的一个GUI编程框架,通过与数据库的结合,能够实现灵活快速的数据管理操作。PyQt可以操作绝大多数的数据库,包括SQLite、MySQL、Oracle等等。
通过使用PyQt实现数据库绑定功能,可以方便地将数据表或视图与控件进行绑定,实现数据的自动更新与显示,这大大减轻了程序员的负担,提高了开发效率。
二、PyQt与SQLite数据库的绑定
在实现数据库绑定功能时,我们首先需要选择合适的数据库。在本文中,我们选择SQLite,这是一个轻量级的数据库,非常适合小型项目的使用。
1. PySQLite模块的安装
首先需要安装PySQLite模块,这个模块提供了Python对SQLite数据库的支持。可以通过pip工具进行安装:
pip install pysqlite3
安装完成后,我们就可以开始使用这个模块了。
2. 建立SQLite数据库
我们需要在SQLite数据库中创建一张表,来存储将要绑定的数据。以员工信息表为例,表结构如下:
CREATE TABLE employee (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name VARCHAR(20) NOT NULL,
gender VARCHAR(2) NOT NULL,
age INTEGER DEFAULT 0,
department VARCHAR(50) NOT NULL
这个表包含了员工的基本信息,包括编号、姓名、性别、年龄和所在部门。
3. 建立PyQt窗口
我们需要创建一个PyQt窗口,用来显示员工信息表中的数据。这个窗口需要包含一个QTableView控件,用来显示表格数据。
from PyQt5.QtWidgets import QApplication,QMnWindow,QTableView
from PyQt5.QtSql import QSqlDatabase,QSqlQuery
class MnWindow(QMnWindow):
def __init__(self,parent=None):
super(MnWindow,self).__init__(parent)
self.setWindowTitle(‘Employee Information’)
self.resize(480,280)
self.tableView=QTableView(self)
self.tableView.setGeometry(20,20,440,240)
self.tableView.setSortingEnabled(True)
self.db=QSqlDatabase.addDatabase(‘QSQLITE’)
self.db.setDatabaseName(’employee.db’)
if not self.db.open():
print(self.db.lastError().text())
sys.exit(1)
self.model=QtSql.QSqlTableModel(self,db)
self.model.setTable(’employee’)
self.model.sort(0,QtCore.Qt.DescendingOrder) # 按第0列降序排列
self.model.select()
self.tableView.setModel(self.model)
self.tableView.resizeColumnsToContents() # 自适应列宽
if __name__ == ‘__mn__’:
app=QApplication(sys.argv)
win=MnWindow()
win.show()
sys.exit(app.exec_())
在上面的代码中,我们创建了一个QMnWindow窗口,包含了一个QTableView控件。同时,我们通过QSqlDatabase.addDatabase(‘QSQLITE’)方法创建了一个SQLite数据库,并连接到了名为employee.db的数据库文件。在连接成功后,我们可以通过QSqlQuery对象进行查询和更新数据库。这里的QSqlTableModel控件可以方便地与数据库中的数据表进行绑定。
我们将表格设置为自适应列宽。这样,每个字段的宽度将调整得足够宽,可以容纳数据,增加用户体验。
三、绑定控件与数据库
在上一节中,我们已经实现了创建PyQt窗口和连接SQLite数据库的功能。下一步是实现控件与数据库的绑定,以自动更新数据。
1. 实现数据插入
我们可以使用QSqlQuery对象插入新的员工记录。当我们单击插入按钮时,一个新的员工记录将入到数据库中。同时,表格中的数据也将刷新。
from PyQt5.QtWidgets import QApplication,QMnWindow,QWidget,QHBoxLayout,QVBoxLayout,QTableView,QLineEdit,QPushButton
from PyQt5.QtSql import QSqlDatabase,QSqlQuery,QSqlTableModel
class MnWindow(QMnWindow):
def __init__(self,parent=None):
super(MnWindow,self).__init__(parent)
self.setWindowTitle(‘Employee Information’)
self.resize(480,280)
centralWidget=QWidget(self)
self.setCentralWidget(centralWidget)
self.tableView=QTableView(self)
self.tableView.setSortingEnabled(True)
self.db=QSqlDatabase.addDatabase(‘QSQLITE’)
self.db.setDatabaseName(’employee.db’)
if not self.db.open():
print(self.db.lastError().text())
sys.exit(1)
self.model=QSqlTableModel(self,db)
self.model.setTable(’employee’)
self.model.sort(0,QtCore.Qt.DescendingOrder)
self.model.select()
self.tableView.setModel(self.model)
self.tableView.resizeColumnsToContents()
self.nameEdit=QLineEdit(self)
self.genderEdit=QLineEdit(self)
self.ageEdit=QLineEdit(self)
self.departmentEdit=QLineEdit(self)
nameLabel=QLabel(‘Name’,self)
genderLabel=QLabel(‘Gender’,self)
ageLabel=QLabel(‘Age’,self)
departmentLabel=QLabel(‘Department’,self)
insertButton=QPushButton(‘Insert’,self)
insertButton.clicked.connect(self.insertRecord)
hlayout=QHBoxLayout()
vlayout=QVBoxLayout(centralWidget)
vlayout.addWidget(self.tableView)
vlayout.addLayout(hlayout)
hlayout.addWidget(nameLabel)
hlayout.addWidget(self.nameEdit)
hlayout.addWidget(genderLabel)
hlayout.addWidget(self.genderEdit)
hlayout.addWidget(ageLabel)
hlayout.addWidget(self.ageEdit)
hlayout.addWidget(departmentLabel)
hlayout.addWidget(self.departmentEdit)
hlayout.addWidget(insertButton)
def insertRecord(self):
query=QSqlQuery(db)
query.prepare(‘INSERT INTO employee (name,gender,age,department) VALUES (?,?,?,?)’)
query.addBindValue(self.nameEdit.text())
query.addBindValue(self.genderEdit.text())
query.addBindValue(int(self.ageEdit.text()))
query.addBindValue(self.departmentEdit.text())
if not query.exec():
print(query.lastError().text())
self.model.select()
if __name__ == ‘__mn__’:
app=QApplication(sys.argv)
win=MnWindow()
win.show()
sys.exit(app.exec_())
在上面的代码中,我们创建了一个新的QWidget,并在其中添加了四个QLineEdit控件(分别用于输入员工姓名、性别、年龄和所属部门)、一个QPushButton控件(用于插入新的员工记录)。通过调用insertRecord函数,在将所有输入数据绑定到QSqlQuery对象后,将新条目插入到数据库中。
2. 实现数据删除
当我们单击删除按钮时,选择的员工记录将被删除。同时,表格中的数据也将刷新。
from PyQt5.QtWidgets import QApplication,QMnWindow,QWidget,QHBoxLayout,QVBoxLayout,QTableView,QLineEdit,QPushButton
from PyQt5.QtSql import QSqlDatabase,QSqlQuery,QSqlTableModel
class MnWindow(QMnWindow):
def __init__(self,parent=None):
super(MnWindow,self).__init__(parent)
self.setWindowTitle(‘Employee Information’)
self.resize(480,280)
centralWidget=QWidget(self)
self.setCentralWidget(centralWidget)

self.tableView=QTableView(self)
self.tableView.setSortingEnabled(True)
self.db=QSqlDatabase.addDatabase(‘QSQLITE’)
self.db.setDatabaseName(’employee.db’)
if not self.db.open():
print(self.db.lastError().text())
sys.exit(1)
self.model=QSqlTableModel(self,db)
self.model.setTable(’employee’)
self.model.sort(0,QtCore.Qt.DescendingOrder)
self.model.select()
self.tableView.setModel(self.model)
self.tableView.resizeColumnsToContents()
self.nameEdit=QLineEdit(self)
self.genderEdit=QLineEdit(self)
self.ageEdit=QLineEdit(self)
self.departmentEdit=QLineEdit(self)
nameLabel=QLabel(‘Name’,self)
genderLabel=QLabel(‘Gender’,self)
ageLabel=QLabel(‘Age’,self)
departmentLabel=QLabel(‘Department’,self)
insertButton=QPushButton(‘Insert’,self)
insertButton.clicked.connect(self.insertRecord)
deleteButton=QPushButton(‘Delete’,self)
deleteButton.clicked.connect(self.deleteRecord)
hlayout=QHBoxLayout()
vlayout=QVBoxLayout(centralWidget)
vlayout.addWidget(self.tableView)
vlayout.addLayout(hlayout)
hlayout.addWidget(nameLabel)
hlayout.addWidget(self.nameEdit)
hlayout.addWidget(genderLabel)
hlayout.addWidget(self.genderEdit)
hlayout.addWidget(ageLabel)
hlayout.addWidget(self.ageEdit)
hlayout.addWidget(departmentLabel)
hlayout.addWidget(self.departmentEdit)
hlayout.addWidget(insertButton)
hlayout.addWidget(deleteButton)
def insertRecord(self):
query=QSqlQuery(db)
query.prepare(‘INSERT INTO employee (name,gender,age,department) VALUES (?,?,?,?)’)
query.addBindValue(self.nameEdit.text())
query.addBindValue(self.genderEdit.text())
query.addBindValue(int(self.ageEdit.text()))
query.addBindValue(self.departmentEdit.text())
if not query.exec():
print(query.lastError().text())
self.model.select()
def deleteRecord(self):
selected=self.tableView.selectedIndexes()
if len(selected)!=1:
row=selected[0].row()
self.model.removeRows(row,1)
if __name__ == ‘__mn__’:
app=QApplication(sys.argv)
win=MnWindow()
win.show()
sys.exit(app.exec_())
在上面的代码中,我们创建了一个新的QPushButton控件,用于从数据库中删除所选员工记录。我们使用QTableView.selectedIndexes()方法获取被选中的数据行,然后调用QSqlTableModel.removeRows()方法删除该记录。
相关问题拓展阅读:
用pyqt做好了前端,想用django做服务器,想问一下大概怎么搭建呢?
一般客户端(也就是你说的前段)跟服务器端(你准备使用Django)都是通过 HTTP 协议交换信息的(除纯尘非有特别的需求,才会使用别的或者定制协议)。
在 客户端(PyQT)中,你可以安装 Requests 库,它可以帮助你发送 HTTP 请求给服务器端,
在 Django 中你可以使用燃塌 Django REST Framework
网页链接
处理 客户端做段禅的
HTTP请求
pyqt4pyqt5哪个好用_pyqt5使用
PyQt5不兼容PyQt4(尽管经验表明,将PyQt4的应用程序移植到PyQt5难度不是很大)。本节描述了两者之间的主要差异。
支持Python的版本
不支持较早的Python2.6之前的版本┊。
推荐使用特性
PyQt5不支持任何被标记为过时的或废弃的QTV5.0的API。然而,还是可能有一些“漏网之鱼”。如果将来发现了,这些错误将被删除。
多个API
PyQt4支持许多不同的API版本(QString,QVariant等)。QVariant
PyQt5只支持V2版本的API。一个例外:对于QVariant,去除了。
老式的信号和槽
PyQt4的旧式的信号和槽不再被支持。因此以下用法在PyQt5中已经不能使用:
QObject.connect()
QObject.emit()
所有那些含有参数,并且对返回结果调用SIGNAL()或SLOT()的方法不再被支持。绑定信号与调用函数总是等效的。
此外,另一个差异是增加了下面的函数:
disconnect()断开所有对QObject实例的连接,不需要参数。
新风格的信号和槽
QT实现的信号与一个可选的参数作为两个独立的信号,一个与论点和一个没有它。PyQt4暴露这两允许你连接到他们每个。然而,当发射信号,你必须使用适当的参数发出的信号数。
PyQt5暴露唯一的信号在所有指定参数。然而它允许任何可选参数被省略时,发射信号。
不同于PyQt4,PyQt5支持在类中自定义属性、信号与槽,即使这个类没有继承自QObject(比如:混合类)。
,QtScript和模块
PyQt4的,QtScript和模块不再支持。这些已被替换为PyQt5的QtQml和QtQuick模块,PyQt5支持Python对象创建QML。
QtGui模块
PyQt4的QtGui模块,在PyQt5中被拆分成三个模块:QtGui,和QtWidgets。
QtOpenGL模块
只有QGlContext,QGlFormat和QGlWidget类被PyQt5支持。
QtWebKit模块
PyQt4的QtWebKit模块被分成PyQt5的QtWebKit和模块。
pyqtconfig模块
PyQt4的pyqtconfig模块不支持。截面PyQt5扩展的API介绍了支持PyQt5(例如提供第三方包qscintilla),要建立在PyQt5。
dbus.mainloop.qt模块
PyQt4的dbus.mainloop.qt模块称为dbus.mainloop.PyQt5在PyQt5。这使得他们可以并排安装。它们的功能是相同。
QDataStream
的reaint8(),readint8(),writeuint8()和writeint8()方法解释值读写数字。PyQt4中它们被解释为单个字符的字符串。
QFileDialog
PyQt4的QFileDialog类的(),()和()方法,在PyQt5中已更名为(),()和()。
而PyQt4原来的(),()和()不再被PyQt5支持。
QGraphicsItemAnimation
对废弃的QGraphicsItemAnimation类的支持已被删除。如果移植现有的PyQt4应用程序,首先考虑用QPropertyAnimation替换。
对废弃的QMatrix类的支持已被删除。如果移植现有的PyQt4应用程序,首先考虑用QTransform替换。
QPyTextObject
PyQt4的QPyTextObject,是作为一个无法定义一个继承多个Qt类的Python类的变通的解决方法。PyQt5支持定义一个Python类,来继承多个Qt类,只要他们已经在C声明为Q_DECLARE_INTERFACE。所以,QPyTextObject没有在PyQt5中实现。
PyQt4,套装在Python中的V2和V3一组Python列表实现。在PyQt5套装总是作为一个集实现。
pyuic5不支持pyqt3——包装国旗pyuic4。
pyr5不支持-PY2和-PY3国旗pyr4。输出pyr5兼容所有版本的PythonPython2.6入手。
多重继承
不像PyQt4PyQt5类实现多重继承,合作。在其他的话总是做PyQt5类下面的Python代码在等效V3__init__方法(如kwds是一个未使用的关键词参数字典):
super().__init__(**kwds)
这意味着,那些未使用的关键字的参数传递给__init__任何mixin类的方法。这些混合类必须合作,即必须如果他们有自己做一个类似的__init__实现。
当使用多重继承PyQt4是常见的__init__的超类方法明确,例如:
classMyQObject(QObject,MyMixin):
def__init__(self,parent,mixin_arg):
QObject.__init__(self,parent)
MyMixin.__init__(self,mixin_arg)
#Otherinitialisation…
在上述将导致PyQt5mymixin__init__。被称为两。而要实现:
classMyQObject(QObject,MyMixin):
def__init__(self,**kwds):
super().__init__(**kwds)
#Otherinitialisation…
请注意,如果没有其他的初始化做那么__init__方法不需要。
混合类应实施如下:
classMyMixin:
def__init__(self,mixin_arg,**kwds):
super().__init__(**kwds)
#Otherinitialisation…
为什么用pyqt的不多?
大多是因为不会用,他们在自学的时候,找的资料教程一般都是手写的代码,等到他们学会用的时候,就知道是真的好用。
PyQt是一个创建GUI
应用程序
的工具包。它是Python编程语言和Qt库的成功融合。Qt库是目前最强大的库之一。PyQt是由Phil Thompson 开发。
PyQt实现了一个Python模块集。它有超过300类,将近6000个函数和银兄方法。它是一个多平台的工具包,可以运行在所有主要操作系统上,包括UNIX,Windows和Mac。
PyQt采用双许可证,开发人员可以选择GPL和商业许可。在此之前,GPL的版本只能用在Unix上,从PyQt的版本4开始,GPL许可证可用于所有支持的平台。
因为可用的类有很多,他们被分成几个模块。QtCore模块包含核心的非GUI功能。该模块用于时间、文件和目录、各种
数据类型
、流、网址、MIME类型、线程或进程。
QtGui模块包含图形组件和相关的类,例如按钮、窗体、状态栏、工具宏缓栏、滚动条、位图、颜色、字体等。
QtNetwork模块包含了网络编程的类,这些类允许编写TCP/IP和UDP的客户端和服务器,他们使网络编程更简单,更轻便。
QtXml包含使用XML文件的类,这个模块提供了SAX和DOM API的实现。QtSvg模块提蔽搏模供显示的SVG文件的类。可缩放矢量图形(SVG)是一种用于描述二维图形和图形应用程序的
XML语言
QtOpenGL模块使用OpenGL库渲染3D和2D图形,该模块能够无缝集成Qt的GUI库和OpenGL库。QtSql模块提供用于数据库的类。
pyqt 绑定数据库的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于pyqt 绑定数据库,Python PyQt实现数据库绑定功能,用pyqt做好了前端,想用django做服务器,想问一下大概怎么搭建呢?,pyqt4pyqt5哪个好用_pyqt5使用,为什么用pyqt的不多?的信息别忘了在本站进行查找喔。
香港服务器首选树叶云,2H2G首月10元开通。树叶云(shuyeidc.com)提供简单好用,价格厚道的香港/美国云服务器和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。
如何使用python连接数据库,插入并查询数据
你可以访问Python数据库接口及API查看详细的支持数据库列表。 不同的数据库你需要下载不同的DB API模块,例如你需要访问Oracle数据库和Mysql数据,你需要下载Oracle和MySQL数据库模块。 DB-API 是一个规范. 它定义了一系列必须的对象和数据库存取方式, 以便为各种各样的底层数据库系统和多种多样的数据库接口程序提供一致的访问接口 。 Python的DB-API,为大多数的数据库实现了接口,使用它连接各数据库后,就可以用相同的方式操作各数据库。 Python DB-API使用流程:引入 API 模块。 获取与数据库的连接。 执行SQL语句和存储过程。 关闭数据库连接。 什么是MySQLdb?MySQLdb 是用于Python链接Mysql数据库的接口,它实现了 Python 数据库 API 规范 V2.0,基于 MySQL C API 上建立的。 如何安装MySQLdb?为了用DB-API编写MySQL脚本,必须确保已经安装了MySQL。 复制以下代码,并执行:#!/usr/bin/python# -*- coding: UTF-8 -*-import MySQLdb如果执行后的输出结果如下所示,意味着你没有安装 MySQLdb 模块:Traceback (most recent call last):File , line 3, in import MySQLdb ImportError: No module named MySQLdb 安装MySQLdb,请访问 ,(Linux平台可以访问:)从这里可选择适合您的平台的安装包,分为预编译的二进制文件和源代码安装包。 如果您选择二进制文件发行版本的话,安装过程基本安装提示即可完成。 如果从源代码进行安装的话,则需要切换到MySQLdb发行版本的顶级目录,并键入下列命令: $ gunzip $ tar -xvf $ cd MySQL-python-1.2.2 $ python build $ python install 注意:请确保您有root权限来安装上述模块。 数据库连接 连接数据库前,请先确认以下事项: 您已经创建了数据库 TESTDB. 在TESTDB数据库中您已经创建了表 EMPLOYEE EMPLOYEE表字段为 FIRST_NAME, LAST_NAME, AGE, SEX 和 INCOME。 连接数据库TESTDB使用的用户名为 testuser ,密码为 test123,你可以可以自己设定或者直接使用root用户名及其密码,Mysql数据库用户授权请使用Grant命令。 在你的机子上已经安装了 Python MySQLdb 模块。 如果您对sql语句不熟悉,可以访问我们的 SQL基础教程 实例: 以下实例链接Mysql的TESTDB数据库: #!/usr/bin/python # -*- coding: UTF-8 -*- import MySQLdb # 打开数据库连接 db = (localhost,testuser,test123,TESTDB ) # 使用cursor()方法获取操作游标 cursor = () # 使用execute方法执行SQL语句 (SELECT VERSION()) # 使用 fetchone() 方法获取一条数据库。 data = () print Database version : %s % data # 关闭数据库连接 () 执行以上脚本输出结果如下: Database version : 5.0.45 创建数据库表 如果数据库连接存在我们可以使用execute()方法来为数据库创建表,如下所示创建表EMPLOYEE: #!/usr/bin/python # -*- coding: UTF-8 -*- import MySQLdb # 打开数据库连接 db = (localhost,testuser,test123,TESTDB ) # 使用cursor()方法获取操作游标 cursor = () # 如果数据表已经存在使用 execute() 方法删除表。 (DROP TABLE IF EXISTS EMPLOYEE) # 创建数据表SQL语句 sql = CREATE TABLE EMPLOYEE ( FIRST_NAME CHAR(20) NOT NULL, LAST_NAME CHAR(20), AGE INT, SEX CHAR(1), INCOME FLOAT ) (sql) # 关闭数据库连接 () 数据库插入操作 以下实例使用执行 SQL INSERT 语句向表 EMPLOYEE 插入记录: #!/usr/bin/python # -*- coding: UTF-8 -*- import MySQLdb # 打开数据库连接 db = (localhost,testuser,test123,TESTDB ) # 使用cursor()方法获取操作游标 cursor = () # SQL 插入语句 sql = INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME) VALUES (Mac, Mohan, 20, M, 2000) try: # 执行sql语句 (sql) # 提交到数据库执行 () except: # Rollback in case there is any error () # 关闭数据库连接 () 以上例子也可以写成如下形式: #!/usr/bin/python # -*- coding: UTF-8 -*- import MySQLdb # 打开数据库连接 db = (localhost,testuser,test123,TESTDB ) # 使用cursor()方法获取操作游标 cursor = () # SQL 插入语句 sql = INSERT INTO EMPLOYEE(FIRST_NAME, \ LAST_NAME, AGE, SEX, INCOME) \ VALUES (%s, %s, %d, %c, %d ) % \ (Mac, Mohan, 20, M, 2000) try: # 执行sql语句 (sql) # 提交到数据库执行 () except: # 发生错误时回滚 () # 关闭数据库连接 () 实例: 以下代码使用变量向SQL语句中传递参数: .................................. user_id = test123 password = password (insert into Login values(%s, %s) % \ (user_id, password)) .................................. 数据库查询操作 Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据。 fetchone(): 该方法获取下一个查询结果集。 结果集是一个对象 fetchall():接收全部的返回结果行. rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。 实例: 查询EMPLOYEE表中salary(工资)字段大于1000的所有数据: #!/usr/bin/python # -*- coding: UTF-8 -*- import MySQLdb # 打开数据库连接 db = (localhost,testuser,test123,TESTDB ) # 使用cursor()方法获取操作游标 cursor = () # SQL 查询语句 sql = SELECT * FROM EMPLOYEE \ WHERE INCOME > %d % (1000) try: # 执行SQL语句 (sql) # 获取所有记录列表 results = () for row in results: fname = row[0] lname = row[1] age = row[2] sex = row[3] income = row[4] # 打印结果 print fname=%s,lname=%s,age=%d,sex=%s,income=%d % \ (fname, lname, age, sex, income ) except: print Error: unable to fecth data # 关闭数据库连接 () 以上脚本执行结果如下: fname=Mac, lname=Mohan, age=20, sex=M, income=2000 数据库更新操作 更新操作用于更新数据表的的数据,以下实例将 TESTDB表中的 SEX 字段全部修改为 M,AGE 字段递增1: #!/usr/bin/python # -*- coding: UTF-8 -*- import MySQLdb # 打开数据库连接 db = (localhost,testuser,test123,TESTDB ) # 使用cursor()方法获取操作游标 cursor = () # SQL 更新语句 sql = UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = %c % (M) try: # 执行SQL语句 (sql) # 提交到数据库执行 () except: # 发生错误时回滚 () # 关闭数据库连接 () 删除操作 删除操作用于删除数据表中的数据,以下实例演示了删除数据表 EMPLOYEE 中 AGE 大于 20 的所有数据: #!/usr/bin/python # -*- coding: UTF-8 -*- import MySQLdb # 打开数据库连接 db = (localhost,testuser,test123,TESTDB ) # 使用cursor()方法获取操作游标 cursor = () # SQL 删除语句 sql = DELETE FROM EMPLOYEE WHERE AGE > %d % (20) try: # 执行SQL语句 (sql) # 提交修改 () except: # 发生错误时回滚 () # 关闭连接 () 执行事务 事务机制可以确保数据一致性。 事务应该具有4个属性:原子性、一致性、隔离性、持久性。 这四个属性通常称为ACID特性。 原子性(atomicity)。 一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。 一致性(consistency)。 事务必须是使数据库从一个一致性状态变到另一个一致性状态。 一致性与原子性是密切相关的。 隔离性(isolation)。 一个事务的执行不能被其他事务干扰。 即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。 持久性(durability)。 持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。 接下来的其他操作或故障不应该对其有任何影响。 Python DB API 2.0 的事务提供了两个方法 commit 或 rollback。
python读取文件read file, 从中计算平均值和最大值, 最小值 。
因为你将min_num初始化为0了只有当其他的数字小于min_num,你才将那个值赋予min_num可是,其他的数字都比min_num大,所有不会去改变min_num的值,它就是0你应该,一开始,读第一个数字,就把max、min都附上第一个数字后面慢慢去比较和更新按照你的逻辑,如果所有的数字是负数,你的最大值出来的肯定是0
python 2.7.11怎么安装数据库
到python的官方网站下载最新的python2安装程序,目前最新版本是2.7.11。 要注意 在下载页面,有两个类型的PYTHON ,python3 和 python2 ,这里是介绍python 2的安装.将python 下载到本地,我的版本是 32位,64位没有什么区别双击程序图标,开始安装。 你会看到安装界面。 有两个选项,默认选择 第一个 所有人都可以运行,如果不愿意,可以选择第二个,点击“next”按钮,进行下一步可以看到 python的安装目录,系统默认一个目录,可以更改,也可以默认路径。 然后点击“next”按钮,进行下一步软件列出 可选安装项目,建议不要修改前面的,最后一下,建议选择安装到本地。 将 python 加到 PATH 下,这样方便在 COMMAND中使用。 然后点击 “next”按钮 继续软件进行自动安装,安装成功后,会显示成功提示。 验证安装是否成功,打开一个COMMAND ,输入 python ,如果安装成功,系统会显示 python shell ,上面会有安装的版本号。 表示安装成功。
发表评论