一、MySQLdb包的安装

1. 在win环境下,下载MySQL-python-1.2.3,有两种方式:

(1) 下载src源码.tar.gz(这个源码需要build编译再安装.egg包(当于.jar包));

不过这种方法之后需要修改环境变量和MySQLdb.conf文件夹里的配置文件等等,具体网上去搜对应版本,我用的第二种方法,在python命令行里直接import MySQLdb;没有出现任何问题。

(2) 直接下载MySQL-python-1.2.3.exe安装包(双击直接安装);

这里直接安装的.exe,在python命令行里import没问题,在PyCharm里import没问题,但在pydev里引入就提示”uncheck package”,估计是pydev这个插件本身就有一些不完善的功能,要不就是最容易忽略的错误:忘记设置环境变量或者环境变量设置的路径错误。

2. 解决eclipse里pydev插件不能引入MySQLdb包的问题:强制编译,而不仅是要在构建路径里引入库文件、.egg包(当于.jar包)等

解决方案:

Eclipse中,windows==>preference==>Pydev中,配置Interpreter-Python的ForcedBuiltins选项卡内容,手动添加内容MySQLdb,将模块强制编译进去。

如果仅操作"构建路径System PYTHONPATH"的内容,引入库文件,无论如何不会解决问题。一定要强制编译进去!!!

二、连接数据库

python连接mysql主要用到了游标cursor来访问,这个是MySQLdb自带的。

补充几个对象的方法和属性:

1.connection的参数conn=MySQLdb.connect(“localhost”, “root”, “123456”, “testdb”)

亦作conn = MySQLdb.connect(host=’localhost’,user=’root’, passwd=’123456’, db=’testdb’)
注意这里没有写明端口号port=3306,是因为MySQLdb默认端口号为3306,不用指定,如果你自己改了,就要写上。

connection的参数:

  • host,连接的数据库服务器主机名,默认为本地主机(localhost)。
  • user,连接数据库的用户名,默认为当前用户。
  • passwd,连接密码,没有默认值。
  • db,连接的数据库名,没有默认值。
  • port,指定数据库服务器的连接端口,默认是3306
  • conv,将文字映射到Python类型的字典。默认为MySQLdb.converters.conversions
  • cursorclass,cursor()使用的种类,默认值为MySQLdb.cursors.Cursor。
  • compress,启用协议压缩功能。
  • named_pipe,在windows中,与一个命名管道相连接。
  • init_command,一旦连接建立,就为数据库服务器指定一条语句来运行。
  • read_default_file,使用指定的MySQL配置文件。
  • read_default_group,读取的默认组。
  • unix_socket,在unix中,连接使用的套接字,默认使用TCP。

2.connection(连接)对象
 方法名                     作用
conn. close()                  关闭数据库
conn.commit()                提交当前事务

----- 必须sql写完后要提交commit(),尤其是insert, update, delete时,否则数据库没有变化!!! 

----- 而像select这种普通的查询,不涉及修改数据库的,是否commit()没有关系
conn.rollback()              取消当前事务

---- 异常处理except Exception:里最好还是加上回滚rollback()
conn.cursor()           获取当前连接的游标对象
conn.rrorhandler(cxn,cur,errcls,errval)  作为已给游标的句柄

3.cursor游标对象属性及方法
(1) cursor执行命令的方法

callproc(sql, procname, args)    执行存储过程,接收参数为存储过程名和参数列表,返回值为受影响的行数
execute(sql,param, args)     执行单条sql语句,接收参数param,返回值为args受影响的行数
executemany(sql,param, args)  执行多条sql语句,接收参数param,返回值为args受影响的行数
next()            使用迭代对象得到结果的下一行
nextset() / nestset(self):    移动到下一个结果集(如果支持的话)

close()           关闭游标

connection       创建此游标的连接(可选)

(2) cursor用来接收返回值的方法

fetchone()        返回一条结果行

fetchall(self)        匹配所有剩余结果
fetchmany(size-cursor,arraysize)  匹配结果的下几行

rowcount         读取数据库表中的行数,最后一次execute()返回或影响的行数

scroll(self, value, mode=’relative’):移动指针到某一行。如果mode=’relative’,则表示从当前所在行移动value条,如果mode=’absolute’,则表示从结果集的第一行移动value条

arraysize        使用fetchmany()方法时一次取出的记录数,默认为1
discription      返回游标的活动状态,包括(7元素):

(name,type_code,display_size,internal_size,precision,scale,null_ok)其中name, type_code是必须的。
lastrowid        返回最后更新行的ID(可选),如果数据库不支持,返回None

__iter__()        创建迭代对象(可选,参考next())
messages          游标执行好数据库返回的信息列表(元组集合)
rownumber         当前结果集中游标的索引(从0行开始)
setinput-size(sizes)   设置输入最大值
setoutput-size(sizes[,col])  设置列输出的缓冲值

三、代码

(1) mysql_1.py

import MySQLdbtry:conn = MySQLdb.connect(host='localhost', user='root', passwd='mysql', db='testdb') # 默认port可以不写3306cursor = conn.cursor()sql = "insert into table1 values('105', 'tomy', 23, 'm', 'U.KK.')"cursor.execute(sql)conn.commit()    #提交事务commit()cursor.execute("select * from table1")results = cursor.fetchall()for re in results:print recursor.close()conn.close()
except MySQLdb.Error, e:conn.rollback()   #回滚rollback()print "MySQL Error %d: %s" % (e.args[0], e.args[1])
print e

(2) mysql_2.py

# -*-encoding: utf-8 -*-
import os
import string
import sys
import MySQLdb# 连接数据库
try:   conn = MySQLdb.connect(host='localhost',port=3306, user='root', passwd='mysql', db='testdb')
except Exception, e:print esys.exit()# 获取cursor游标对象来进行操作
cursor = conn.cursor()# 创建表
sql = "create table if not exists test1(name varchar(128) primary key, age int(4))"
cursor.execute(sql)
print "success create table test1!"# 插入数据
sql = "insert into test1(name, age) values('%s', '%d')" % ("denny", 23)
try:cursor.execute(sql)conn.commit()  #凡是insert,update,delete都要"提交事务commit()",否则数据库不会改变print "succeess insert a record!"
except Exception, e:conn.rollback()  #异常必须回滚rollback()print e
# 插入多条数据
sql = "insert into test1(name, age) values (%s, %s)"
param = (("tom", 24), ("alice", 25), ("bob", "26"))
try:cursor.executemany(sql, param) #批量插入数据时必须用.executemany(sql)而不是.execute(sql),那是单条数据conn.commit()print "success insert many records!"
except Exception, e:conn.rollback()print e# 查询出数据
sql = "select * from test1"
cursor.execute(sql)
alldata = cursor.fetchall()
# 如果有数据返回就循环输出,alldata是个二维列表)
if alldata:for rec in alldata:print rec[0], rec[1]  # 分别输出,结果为denny 23# print rec    # 也可以直接输出rec,不带下标rec[i], 结果为('denny', 23L)# 关闭连接
cursor.close()
conn.close()

控制台输出结果:

SQL表结果:

(3) mysql_3.py (fetchone()示例)

import MySQLdbdb = MySQLdb.connect("localhost", "root", "mysql", "testdb" )
cursor = db.cursor()
cursor.execute("select * from test1")
data = cursor.fetchone()
while data!=None:print data[1]data = cursor.fetchone()
db.close

(4) mysql_4.py(fetchall()示例)

import MySQLdbdb = MySQLdb.connect("localhost", "root", "mysql", "testdb" )
cursor = db.cursor()
cursor.execute("select * from test1")
datas = cursor.fetchall()
for data in datas:print data[1]
print cursor.rowcount,"rows in tatal"
db.close

转载于:https://www.cnblogs.com/DianaCody/p/5425665.html

python读写mysql总结相关推荐

  1. python多进程爬虫保存数据_Python多进程爬虫东方财富盘口异动数据+Python读写Mysql与Pandas读写Mysql效率对比...

    先上个图看下网页版数据.mysql结构化数据 通过Python读写mysql执行时间为:1477s,而通过Pandas读写mysql执行时间为:47s,方法2速度几乎是方法1的30倍.在于IO读写上, ...

  2. python爬虫-21-三分钟python读写mysql数据库

    MySQL是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一. ...

  3. python后台架构Django教程——连接读写mysql数据库

    全栈工程师开发手册 (作者:栾鹏) python教程全解 本文衔接至python后台架构Django开发全解. 有其他问题请先阅读:http://blog.csdn.net/luanpeng82548 ...

  4. pandas读写MySQL数据库详解及实战

    pandas读写MySQL数据库详解及实战 SQLAlchemy是Python中最有名的ORM工具. 关于ORM: 全称Object Relational Mapping(对象关系映射). 特点是操纵 ...

  5. python文件读取输出-Python 读写文件中数据

    1 需求 在文件 h264.txt 中的数据如图1,读入该文件中的数据,然后将第1列的地址删除,然后将数据输出到h264_out.txt中: 图1 h264.txt 数据截图 图2 输出文件 h264 ...

  6. python读中文-python读写中文

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. api api annotation json.dumps( ) 将py ...

  7. python动态生成数据库表 orm_Python自动化 【第十二篇】:Python进阶-MySQL和ORM

    本节内容 数据库介绍 mysql 数据库安装使用 mysql管理 mysql 数据类型 常用mysql命令 创建数据库 外键 增删改查表 权限 事务 索引 python 操作mysql ORM sql ...

  8. python连接mysql的几种方式_Python连接MySQL数据库的多种方式

    本次代码实现连接远程服务器 由于MySQL服务器以独立的进程运行,并通过网络对外服务,所以,需要支持Python的MySQL驱动来连接到MySQL服务器. 目前,MySQL驱动有几种: mysql-c ...

  9. C++读写Mysql数据库

    前言: 一直以来操作数据库我用的都是python,第一次使用C++来操作Mysql数据库,中间遇到了许多问题,特别是Mysql版本为64位,但想在x86或win32下开发Mysql的问题.把这些经验进 ...

最新文章

  1. Python中的标识符有哪些基础原则?
  2. UBOOT手动设置环境变量
  3. Tkinter的Menu组件
  4. osg下物体绕自身轴旋转
  5. Tensorflow框架:目标检测Yolo思想
  6. 2-14 三级菜单
  7. 创业记-我的技术选型
  8. 类的应用python平均分_【数据科学系统学习】Python # 数据分析基本操作[四] 数据规整化和数据聚合与分组运算...
  9. 鸿蒙本质是安卓吗,华为鸿蒙系统遭实锤,本质还是安卓系统
  10. 一款内网端口映射工具
  11. Smartbi的下载安装教程
  12. 有线以太网RJ45网口转无线WiFi,网卡转wifi,有线转无线,RJ45转wifi方案
  13. win10设置pg/pc接口_win10安装postgresql
  14. Java餐饮酒店管理系统PC端,使用SpringBoot、Layer,Beetl
  15. 百度的文心一言 ChatGTP 的对比
  16. MyBatis 遇到 Error updating database.问题
  17. android rom签名 作用,Ubuntu下折腾Android笔记(一)——ROM 签名 | 翅膀~
  18. Eclipse每次打包注意事项
  19. 解决mysql的赋权操作之GRANT ALL PRIVILEGES ON *.* TO ‘root‘@‘%‘ IDENTIFIED BY ‘123456‘ WITH GRANT OPTION问题
  20. 微信端视频播放防被浏览器劫持

热门文章

  1. shell去掉字符两端字符_Shell脚本8种字符串截取方法总结
  2. 【收藏】138条 Vim 命令、操作、快捷键全
  3. 【干货】救火必备:线上故障排查套路大全
  4. 这是阿里技术专家对 SRE 和稳定性保障的理解
  5. OAM Kubernetes 标准实现与核心依赖库发布 | 云原生生态周报 Vol. 52
  6. linux生成日志文件,linux实现按天生成日志文件并自动清理
  7. 错误: 找不到或无法加载主类 Test4解决方案
  8. 服务器弱口令修改,Tomcat服务器弱口令漏洞攻击实验
  9. mysql数据库项目例子_很实用的MySql数据库语句(项目中的例子)
  10. 本地的文件怎么放到虚拟桌面_搬新家桌面文件怎么收纳?5个便宜实用的收纳神器,你买过几个?...