Python连接Mysql并增删改查

拼搏现实的明天。 2022-12-01 11:50 299阅读 0赞

就像Java连MySQL需要加载jdbc驱动一样,python的标准数据接口Python DB-API为开发人员提供了数据库应用编程接口,可以支持很多种数据库,今天我们以mysql为例来介绍python如何操作数据库。

你可以访问 Python数据库接口及API查看详细的支持数据库列表。
不同的数据库需要下载不同的DB API模块,例如你需要访问Oracle数据库和Mysql数据,你需要下载Oracle和MySQL数据库模块。
DB-API 是一个规范. 它定义了一系列必须的对象和数据库存取方式, 以便为各种各样的底层数据库系统和多种多样的数据库接口程序提供一致的访问接口 。

MySQLdb

MySQLdb 是用于Python链接Mysql数据库的接口,它实现了 Python 数据库 API 规范 V2.0,基于 MySQL C API 上建立的。

安装MySQLdb

为了用DB-API编写MySQL脚本,必须确保已经安装了MySQLdb。复制以下代码,并执行:

  1. import MySQLdb

如果执行后的输出结果如下所示,意味着你没有安装 MySQLdb 模块:

  1. Traceback (most recent call last):
  2. File "test.py", line 3, in <module>
  3. import MySQLdb
  4. ImportError: No module named MySQLdb

MySQLdb可以从下面的网址下载安装包,
如果想下载Windows版可以去这个网站 http://sourceforge.net/projects/mysql-python ,安装过程按照安装提示即可完成。
如果想下载的是Linux的安装包可以去这个网站,https://pypi.org/project/MySQL-python/
下载好以后开始在Linux系统下解压:

  1. gunzip MySQL-python-1.2.2.tar.gz
  2. tar -zxf MySQL-python-1.2.2.tar
  3. cd MySQL-python-1.2.2
  4. python setup.py build
  5. python setup.py install

pymysql

python3以后是不支持MySQLdb了,但是可以使用pymysql包,可以直接通过pymysql进行连接。直接在cmd窗口输入命令安装就好了。
pip install pymysql

mysqldb 与 pymsql在用法上几乎相同,只是前者支持python2,后者支持python3,所以根据自己的版本使用就行了。

连接mysql数据库流程图

在这里插入图片描述

Connection()

参数解析:

  • host:数据库主机名.默认是用本地主机
  • port:MySQL服务使用的TCP端口.默认是3306,数字类型
  • user:数据库登陆名.默认是当前用户
  • password:数据库登陆的秘密.默认为空
  • db:要使用的数据库名.没有默认值
  • charset:数据库编码

cursor()

cursor就是一个Cursor对象,这个cursor是一个实现了迭代器(def__iter__())和生成器(yield)的MySQLdb对象,这个时候cursor中还没有数据,只有等到fetchone()或fetchall()的时候才返回一个元组tuple,才支持len()和index()操作,这也是它是迭代器的原因。

但同时为什么说它是生成器呢?因为cursor只能用一次,即每用完一次之后记录其位置,等到下次再取的时候是从游标处再取而不是从头再来,而且fetch完所有的数据之后,这个cursor将不再有使用价值了,即不再能fetch到数据了。

常用方法解析:

  • close():关闭此游标对象
  • fetchone():得到结果集的下一行
  • fetchmany(size):得到结果集的下几行
  • fetchall():得到结果集中剩下的所有行
  • excute(sql[, args]):执行一个数据库查询或命令
  • excutemany(sql, args):执行多个数据库查询或命令

数据库连接前准备

  • 已经创建了MySQL数据库 testdb
  • 创建了表 employee
  • EMPLOYEE表字段为 FIRST_NAME, LAST_NAME, AGE, SEX 和 INCOME
  • 连接数据库TESTDB使用的用户名为 “root” ,密码为 “123”
  • 虚拟机上已经安装了 Python MySQLdb 模块。

使用pycharm操作:

连接Mysql数据库

  1. import MySQLdb
  2. #或者
  3. import pymysql
  4. #打开数据库连接
  5. db = MySQLdb.Connect("localhost",3306,"root", "123", "testdb", charset='utf8' )
  6. #或者
  7. db = pymysql.Connect("localhost",3306, "root", "123", "testdb", charset='utf8' )
  8. #使用cursor()方法获取操作游标
  9. cursor = db.cursor()
  10. #使用execute方法执行SQL语句
  11. cursor.execute("SELECT VERSION()")
  12. #使用 fetchone() 方法获取一条数据
  13. data = cursor.fetchone()
  14. print "Database version : %s " % data
  15. #关闭数据库连接
  16. db.close()

执行结果:

  1. Database version : 5.1.38

python操作mysql创建表

  1. import MySQLdb
  2. #或者
  3. import pymysql
  4. #打开数据库连接
  5. db = MySQLdb.Connect("localhost",3306, "root", "123", "testdb", charset='utf8' )
  6. #或者
  7. db = pymysql.Connect("localhost",3306, "root", "123", "testdb", charset='utf8' )
  8. #使用cursor()方法获取操作游标
  9. cus = db.cursor()
  10. #如果数据表已经存在使用 execute() 方法删除表。
  11. cus.execute("DROP TABLE IF EXISTS EMPLOYEE")
  12. #创建表SQL语句
  13. sql = """CREATE TABLE EMPLOYEE (
  14. FIRST_NAME CHAR(20) NOT NULL,
  15. LAST_NAME CHAR(20),
  16. AGE INT,
  17. SEX CHAR(1),
  18. INCOME FLOAT
  19. )"""
  20. cus.execute(sql)
  21. #关闭数据库连接
  22. db.close()

python操作mysql添加数据

  1. import MySQLdb
  2. #或者
  3. import pymysql
  4. #打开数据库连接
  5. db = MySQLdb.Connect("localhost",3306,"root", "123", "testdb", charset='utf8' )
  6. #或者
  7. db = pymysql.Connect("localhost",3306, "root", "123", "testdb", charset='utf8' )
  8. #使用cursor()方法获取操作游标
  9. cus = db.cursor()
  10. #SQL 插入语句
  11. sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
  12. LAST_NAME, AGE, SEX, INCOME)
  13. VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
  14. try:
  15. # 执行sql语句
  16. cus.execute(sql)
  17. # 提交到数据库执行
  18. db.commit()
  19. except:
  20. # 发生错误时回滚
  21. db.rollback()
  22. #关闭数据库连接
  23. db.close()

第二种添加方法:

  1. import MySQLdb
  2. #或者
  3. import pymysql
  4. #打开数据库连接
  5. db = MySQLdb.Connect("localhost", 3306,"root", "123", "testdb", charset='utf8' )
  6. #或者
  7. db = pymysql.Connect("localhost",3306, "root", "123", "testdb", charset='utf8' )
  8. #使用cursor()方法获取操作游标
  9. cus = db.cursor()
  10. #SQL 插入语句
  11. sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \ LAST_NAME, AGE, SEX, INCOME) \ VALUES (%s, %s, %s, %s, %s )" % \
  12. ('Mac', 'Mohan', 20, 'M', 2000)
  13. try:
  14. #执行sql语句
  15. cursor.execute(sql)
  16. #提交到数据库执行
  17. db.commit()
  18. except:
  19. #发生错误时回滚
  20. db.rollback()
  21. #关闭数据库连接
  22. db.close()

python操作mysql查询数据

Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据。

  1. fetchone(): 该方法获取下一个查询结果集,结果集是一个对象。
  2. fetchall():接收全部的返回结果行.
  3. rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。

查询EMPLOYEE表中age大于20的所有数据:

  1. import MySQLdb
  2. #或者
  3. import pymysql
  4. #打开数据库连接
  5. db = MySQLdb.Connect("localhost",3306, "root", "123", "testdb", charset='utf8' )
  6. #或者
  7. db = pymysql.Connect("localhost",3306, "root", "123", "testdb", charset='utf8' )
  8. #使用cursor()方法获取操作游标
  9. cus = db.cursor()
  10. #SQL 查询语句
  11. sql = "SELECT * FROM EMPLOYEE \ WHERE AGE> %s" % (20)
  12. try:
  13. #执行SQL语句
  14. cus.execute(sql)
  15. #获取所有记录列表
  16. results = cus.fetchall()
  17. for row in results:
  18. fname = row[0]
  19. lname = row[1]
  20. age = row[2]
  21. sex = row[3]
  22. income = row[4]
  23. # 打印结果
  24. print "fname=%s,lname=%s,age=%s,sex=%s,income=%s" % \
  25. (fname, lname, age, sex, income )
  26. except:
  27. print "Error: unable to fecth data"
  28. #关闭数据库连接
  29. db.close()

执行结果:

  1. fname=Mac, lname=Mohan, age=20, sex=M, income=2000

python操作mysql修改数据

  1. import MySQLdb
  2. #或者
  3. import pymysql
  4. #打开数据库连接
  5. db = MySQLdb.Connect("localhost",3306, "root", "123", "testdb", charset='utf8' )
  6. #或者
  7. db = pymysql.Connect("localhost",3306, "root", "123", "testdb", charset='utf8' )
  8. #使用cursor()方法获取操作游标
  9. cus = db.cursor()
  10. #SQL 修改语句
  11. sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')
  12. try:
  13. #执行SQL语句
  14. cus.execute(sql)
  15. #提交到数据库执行
  16. db.commit()
  17. except:
  18. #发生错误时回滚
  19. db.rollback()
  20. #关闭数据库连接
  21. db.close()

python操作mysql删除数据

  1. import MySQLdb
  2. #或者
  3. import pymysql
  4. #打开数据库连接
  5. db = MySQLdb.Connect("localhost",3306, "root", "123", "testdb", charset='utf8' )
  6. #或者
  7. db = pymysql.Connect("localhost",3306, "root", "123", "testdb", charset='utf8' )
  8. #使用cursor()方法获取操作游标
  9. cus = db.cursor()
  10. #SQL 删除语句
  11. sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (20)
  12. try:
  13. #执行SQL语句
  14. cus.execute(sql)
  15. #提交修改
  16. db.commit()
  17. except:
  18. #发生错误时回滚
  19. db.rollback()
  20. #关闭连接
  21. db.close()

Python DB API 2.0 的事务提供了两个方法 commit 或 rollback。

对于支持事务的数据库, 在Python数据库编程中,当游标建立之时,就自动开始了一个隐形的数据库事务。
commit()方法游标的所有更新操作,rollback()方法回滚当前游标的所有操作。每一个方法都开始了一个新的事务。

发表评论

表情:
评论列表 (有 0 条评论,299人围观)

还没有评论,来说两句吧...

相关阅读

    相关 PHP 7 连接MySQL增删

    在网上找了很多发现不怎么全,很多写到一半的,比如只是简单的连接数据库,而没有实现增删改查。我自己做一下总结。 查询 现在我在mysql中创建了school数据库,sch

    相关 MySQL 增删

    MySQL 增删改查 虽然经常对数据库进行操作,但有时候一些sql语句还是会忘记,因此总结一下,方便记忆。 一 对库操作 1 创建数据库 > create dat