今天是2016.5.6r。
学的越多,越发现自己好多东西都不懂。
连接过程都是在网上搜索出来的,没有直接下载mysql数据库,而是下载的phpstudy。至于phpstudy是什么,好像是一个集apache,mysql还有其他支持php开发于于一体的软件,我们只利用其中的mysql功能,软件很小才15M左右,附上phpstudy下载地址。
(http://www.phpstudy.net/phpstudy/phpStudyLite.zip)
一、连接数据库
那么现在就已经安装好pycharm和mysql了,如何连接只需要两步:
(1).在pycharm中安装PyMysql;
(2).使用下面的语句进行连接:
import pymysql
conn=pymysql.connect(host='localhost',user='root',passwd='root',db='mysql',charset='utf8')
cursor = conn.cursor()
其中host,user,passwd,db,charset后面的参数都不用修改,db后面的参数则是要根据数据库中实际想连接哪个库来设定,因为安装好phpstudy后打开数据库管理后能看到默认有很多库,mysql就是其中之一,所以这里选择连接mysql这个库。
二、pycharm中操作数据库
使用上面connect()函数连接后,返回的是一个连接对象,这里用conn来接收。
(1)连接对象(Connection Objects)
这个连接对象提供了对事务(transaction)操作支持的标准方法,这里主要介绍下面三个:
commit() 提交 用法:conn.commit()
rollback() 回滚 用法:conn.rollback() 相当于撤销事务里面的所有操作。
cursor()游标 用法:conn.cursor()
特别注意:
commit和rollback()只有在事务(transaction)中才会起作用,那么在没有声明事务的情况下不起任何作用。不同的数据库中声明事务的方式不同,下面是其中一种:
conn.begin() #python中连接对象开始一个事务的方法
cur.execute('delete from city where code=19')
conn.rollback() #结束一个事务
之所以用到事务是为了防止某些相关联的操作,如购物时添加了订单,而由于某种原因添加订单商品信息失败,则会导致数据库的不完整性。那么对于事务中操作,要么全部执行,要么全部不执行。
(2)游标对象(Cursor Objects)
可以认为cursor就是一个标识,用来标识数据取到什么地方了。你也可以把它理解成数组中的下标。由于连接对象conn没有execute这个属性,即不能直接用conn.execute(sql)来执行相应的语句,所以在pycharm中必须先获取游标,cur=conn.cousor()
所以游标主要用来:执行sql语句和接收返回值
a).执行sql语句
cur.execute(sql)方法执行单条sql语句;(可以是增、删、修改、查询)
cur.executemany(sql)方法也是执行单条sql语句,但是重复执行参数列表里的参数。如下:
cur.executemany(
"""INSERT INTO breakfast (name, spam, eggs, sausage, price)
VALUES (%s, %s, %s, %s, %s)""",
#使用sql语句,这里要接收的参数都用%s占位符.要注意的是,无论你要插入的数据是什么类型,占位符永远都要用%s
[
("Spam and Sausage Lover's Plate", 5, 1, 8, 7.95 ),
("Not So Much Spam Plate", 3, 2, 0, 3.95 ),
("Don't Wany ANY SPAM! Plate", 0, 4, 3, 5.95 )
]
#可以看到使用executemany方法来批量的插入数据,这真是一个很酷的方法!
cur.nextset():移动到下一个结果集
b).接收返回值
在进行完execute(sql)操作后,结果集存储在cur中,要返回数据必须进行接受(fetch)。
cur.fetchone():返回一条结果行;
cur.fetchall():接收返回的全部的结果行;
cur.fetchmany(size=xx):接收size条返回结果行,如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据;如果不指定size,则默认返回一行;
cur.scroll(value, mode=’relative/absolute’):移动指针到某一行.如果mode=’relative’,则表示从当前所在行移动value条,如果mode=’absolute’,则表示从结果集的第一行移动value条。
例子如下:
cur.execute('select * from city')
cur.execute(
'''update city
set code=3
where name='深圳'
''') #对于更新等带条件的多行操作语句一定要用'''xx'''来表示才会不报错。
print(cur.fetchall())
或者如下来打印结果
for each in cur:
print(each)
(3)关闭游标和连接对象
cursor.close()
conn.close()
以上除了rollback()和commit()对事务处理外的操作没有生效外,其他都正确运行了。这里就了解了rollback()和commit()的作用是对事务进行处理。