资讯专栏INFORMATION COLUMN

Python MySQLdb模块

ccj659 / 866人阅读

摘要:模块安装系统报错安装如果是系统,则需要先安装服务。使用字典形式返回数据执行命令,并不会直接打印可以使用来读取。

Python MySQLdb模块 安装

</>复制代码

  1. 系统:Ubuntu 14.04
  2. MySQLdb
  3. $ pip install Mysql-python
  4. -> 报错:EnvironmentError: mysql_config not found (安装libmysqlclient-dev)
  5. $ apt-get install libmysqlclient-dev
  6. $ pip install Mysql-python
  7. 如果是MAC系统,则需要先安装 mysql 服务。
使用

查数据示例(fetchall()获取数据

</>复制代码

  1. import MySQLdb
  2. # 建立连接
  3. conn = MySQLdb.connect(host="127.0.0.1", user="sate", db="dbtest", passwd="password")
  4. # 设置游标
  5. cur = conn.cursor()
  6. # 执行SQL命令,并不会直接返回查询结果,而是返回SQL语句影响的行数
  7. reCount = cur.execute("select * from Products;")
  8. print reCount # 输出一个数字,是SQL影响的行数
  9. # 使用 fetchall()方法获取数据,循环输出结果,以元祖的方式输出
  10. for data in cur.fetchall():
  11. print data
  12. # 关闭连接
  13. cur.close()
  14. conn.close()
  15. # 结果==》
  16. 5
  17. ("00001", "hilife")
  18. ("00002", "GTL")
  19. ("00003", "GLA")
  20. ("000004", "TYA")
  21. ("000005", "TUH")

插入或者更改数据

</>复制代码

  1. import MySQLdb
  2. conn = MySQLdb.connect(host="127.0.0.1", user="sate", db="dbtest", passwd="password")
  3. cur = conn.cursor()
  4. # 定义SQL语句
  5. sql = "insert into Products(prod_id, prod_name) values(%s, %s);"
  6. # 定义数据
  7. params = ("00002", "GLA")
  8. reCount = cur.execute(sql, params) #为了防止SQL注入,可以使用该方法
  9. conn.commit() #提交
  10. cur.close()
  11. conn.close()

批量插入数据

</>复制代码

  1. import MySQLdb
  2. conn = MySQLdb.connect(host="127.0.0.1", user="sate", db="dbtest", passwd="password")
  3. cur = conn.cursor()
  4. # 要批量插入的数据
  5. li = [
  6. ("000004", "TYA"),
  7. ("000005", "TUH")
  8. ]
  9. sql = "insert into Products(prod_id, prod_name) values(%s, %s);"
  10. # 批量使用executemany
  11. reCount = cur.executemany(sql, li) #为了防止SQL注入,可以使用该方法
  12. conn.commit() #提交
  13. cur.close()
  14. conn.close()

之前查看数据时,返回是元祖形式,有时看起来并不明显,我们可以选择用字典的方式,将列名一起输出。

</>复制代码

  1. import MySQLdb
  2. conn = MySQLdb.connect(host="127.0.0.1", user="zheng", db="satezheng", passwd="satezheng")
  3. # 使用字典形式返回数据
  4. cur = conn.cursor(cursorclass = MySQLdb.cursors.DictCursor)
  5. # 执行命令,并不会直接打印,可以使用fetchall来读取。
  6. reCount1 = cur.execute("select * from Products")
  7. print reCount1 # 输出一个数字,是SQL影响的行数
  8. for data in cur.fetchall():
  9. print data
  10. cur.close()
  11. conn.close()
  12. # 结果==》
  13. 5
  14. {"prod_name": "hilife", "prod_id": "00001"}
  15. {"prod_name": "GLA", "prod_id": "00002"}
  16. {"prod_name": "GTL", "prod_id": "00003"}
  17. {"prod_name": "TYA", "prod_id": "000004"}
  18. {"prod_name": "TUH", "prod_id": "000005"}

cursor读取执行结果的方法有:

fetchall() 把所有的都读出来

fetchmany(n) 输出指定数量n的行

fetchone() 只返回第一条结果

fetchone() 一次只返回一条结果,下次返回第二条,和文件的readlines类似

对应的也会有指针的概念,scroll()可以指定读取的位置

</>复制代码

  1. cur.scroll(0, mode="absolute") # 绝对指针, 0 就是指针的位置
  2. cur.scroll(-1, mode="relative") # 相对指针, -1 指针位置向前移一位(指针位置-1)

</>复制代码

  1. import MySQLdb
  2. conn = MySQLdb.connect(host="127.0.0.1", user="zheng", db="satezheng", passwd="satezheng")
  3. cur = conn.cursor()
  4. reCount = cur.execute("select * from Products;")
  5. # 使用 fetchone()方法获取数据
  6. data = cur.fetchone()
  7. print data
  8. data = cur.fetchone()
  9. print data
  10. data = cur.fetchone()
  11. print data
  12. # 结果==》
  13. ("00001", "hilife")
  14. ("00002", "GTL")
  15. ("00003", "GLA")
  16. # 使用绝对指针时
  17. ...
  18. data = cur.fetchone()
  19. print data
  20. data = cur.fetchone()
  21. print data
  22. cur.scroll(0, mode="absolute") # 将指针指向 0
  23. data = cur.fetchone()
  24. print data
  25. # 结果==》
  26. ("00001", "hilife")
  27. ("00002", "GTL")
  28. ("00001", "hilife")
  29. # 使用相对指针
  30. data = cur.fetchone()
  31. print data
  32. data = cur.fetchone()
  33. print data
  34. cur.scroll(-1, mode="relative") # 指针位置减1
  35. data = cur.fetchone()
  36. print data
  37. # 结果==》
  38. ("00001", "hilife")
  39. ("00002", "GTL")
  40. ("00002", "GTL")

cur.lastrawid() 获取自增id

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/40889.html

相关文章

  • 【过时】MySQLdbPython 操作 MySQL 数据库

    摘要:模块提供的是类似于接口的,而模块在基础上又做了进一步封装,使之符合的数据库规范。的数据库规范建议了种不同的方式来构造,只支持其中的一种,代码类似于的格式化操作。提交修改,回滚。异常发生时,调用进行回滚。 NOTE(2017-11-18): MySQLdb 不支持 Python 3,而 Python 3 是主流,所以就没有学习的必要了。 环境:MySQL 5.6.27, Ubuntu 1...

    mj 评论0 收藏0
  • Mac下安装MySQL-python

    摘要:使用安装报错信息中有这两行,没有命令先找下这个命令在哪里,查到是下命令。解决方法添加一个软链接,将命令放到环境变量下然后再执行安装命令看到安装提示有个警告,安装的版本是检测安装是否成功使用方法来检测模块是否安装。 使用easy_install安装 sudo easy_install MySQL-python 报错信息中有这两行,没有mysql_config命令 sh: mysql_co...

    xingqiba 评论0 收藏0
  • Python 连接 MySQL

    摘要:一普通连接方法使用模块普通方式连接。返回结果表示影响的行数。查询时不需要操作,插入更新删除时需要提交。模块点此下载类继承自,表示一个新的连接池。如果需要新的连接池,按照如下格式新增即可。一个连接池可同时提供多个实例对象。 一、普通 MySQL 连接方法   使用模块 MySQLdb 普通方式连接。 #!/usr/bin/env python # _*_ coding:utf-8 _*_...

    williamwen1986 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<