一、Python操作MySQL
https://pypi.python.org/pypi 管理各种模块
# c:\python\Scripts 加入环境变量
C:\Windows\System32>cd c:\python\Scripts
出现如图,安装成功。这样在C:\python\Lib\site-packages出现了pymysql文件夹
pip3 install pymysql
# 下载本地
# 解压到执行目录 C:\python\Lib\site-packages
# python2, 默认无pip命令
# python3, 默认自带pip3命令 如果安装错误,试用下列命令:python3 -m pip install --upgrade pip
pymysql(在python3里)
- 专门用于操作MySQLpython模块
MySQLdb只支持Python2.*,还不支持3.*
可以用PyMySQL代替。安装方法:pip install PyMySQL
然后在需要的项目中,把 __init__.py中添加两行:
import pymysql
pymysql.install_as_MySQLdb()
就可以用 import MySQLdb了。其他的方法与MySQLdb一样。
二、使用操作
1、执行SQL 增
import pymysql
# 创建连接
conn = pymysql.connect(host='localhost', port=3306, user='root', passwd='hilda1106', db='test', charset='utf8')
# 创建游标
cursor = conn.cursor()
cursor.execute("insert into tb1(nid,namename) values(3,'lily')")
# 提交,不然无法保存新建或者修改的数据
conn.commit()
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
执行SQL,并返回收影响行数
import pymysql
# 创建连接
conn = pymysql.connect(port=3306, user='root', passwd='hilda1106', db='test', charset='utf8')
# 创建游标
cursor = conn.cursor()
# 执行SQL,并返回受影响行数
effect_row = cursor.execute("insert into tb1(nid,namename) values(3,'lily')")
print(effect_row)
# 提交,不然无法保存新建或者修改的数据
conn.commit()
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
import pymysql
# 创建连接
conn = pymysql.connect(port=3306, user='root', passwd='hilda1106', db='test', charset='utf8')
# 创建游标
cursor = conn.cursor()
# 执行SQL,并返回受影响行数
# effect_row = cursor.execute("insert into tb1(nid,namename) values(3,'lily')")
#字符串拼接可以,但严厉禁止......会出现sql注入问题
# inp = input('请输入姓名:')
# sq1 = "insert into tb1(nid,namename) values(3,'%s')"
# sq1 = sq1 % (inp,)
# effect_row = cursor.execute(sq1)
##参数传递,必须使用参数的形式
# inp = input('请输入姓名:')
# effect_row = cursor.execute('insert into tb1(nid,namename) values(5,%s)',inp)
# print(effect_row)
# effect_row = cursor.execute('insert into tb1(nid,namename) values(%s,%s)', ('3', '会'))
# print(effect_row)
l = [('6', '会1'), ('7', '会2')]
effect_row = cursor.executemany('insert into tb1(nid,namename) values(%s,%s)', l)
print(effect_row)
# 提交,不然无法保存新建或者修改的数据
conn.commit()
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
2、改
import pymysql
# 创建连接
conn = pymysql.connect(port=3306, user='root', passwd='hilda1106', db='test', charset='utf8')
# 创建游标
cursor = conn.cursor()
effect_row = cursor.execute('update tb1 set namename = %s where nid = %s', ('马',6))
print(effect_row)
# 提交,不然无法保存新建或者修改的数据
conn.commit()
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
3、 删
import pymysql
# 创建连接
conn = pymysql.connect(port=3306, user='root', passwd='hilda1106', db='test', charset='utf8')
# 创建游标
cursor = conn.cursor()
effect_row = cursor.execute('delete from tb1 where nid = %s', (3,))
print(effect_row)
# 提交,不然无法保存新建或者修改的数据
conn.commit()
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
4、 查
import pymysql
# 创建连接
conn = pymysql.connect(port=3306, user='root', passwd='hilda1106', db='test', charset='utf8')
# 创建游标
cursor = conn.cursor()
effect_row = cursor.execute('select * from tb1')
print(effect_row)
result = cursor.fetchall()
print(result)
result = cursor.fetchone()
print(result)
result = cursor.fetmany(3)
print(result)
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
注:在fetch数据时按照顺序进行,可以使用cursor.scroll(num,mode)来移动游标位置,如:
- cursor.scroll(1,mode='relative') # 相对当前位置移动
- cursor.scroll(2,mode='absolute') # 相对绝对位置移动
需要注意的问题:
import pymysql
# 创建连接
conn = pymysql.connect(port=3306, user='root', passwd='hilda1106', db='test', charset='utf8')
# 创建游标
cursor = conn.cursor()
#字符串拼接可以,但严厉禁止......会出现sql注入问题
# inp = input('请输入姓名:')
sq1 = 'select namename,nid from tb1 where namename="%s" and nid="%s"'
sq1 = sq1 % ('alex', 123)
cursor.execute(sq1)
result = cursor.fetchone()
print(result)
##正规流程
# cursor.execute('select nid,namename from tb1 where nid=%s and namename=%s', (123, 'alex')) ##%s 不需要加引号
# result = cursor.fetchone()
# print(result)
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
5、fetch数据类型
关于默认获取的数据是元祖类型,如果想要或者字典类型的数据,即:
import pymysql
# 创建连接
conn = pymysql.connect(port=3306, user='root', passwd='hilda1106', db='test', charset='utf8')
# 创建游标
cursor = conn.cursor()
# 游标设置为字典类型
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# effect_row = cursor.execute('select * from tb1')
# print(effect_row)
#
# result = cursor.fetchall()
# print(result) ##输出为字典类型
# effect_row = cursor.execute('select nid from tb1')
# print(effect_row)
#
# result = cursor.fetchall()
# print(result) ##输出为字典类型
effect_row = cursor.execute('select namename as name from tb1')
print(effect_row)
result = cursor.fetchall()
print(result) ##输出为字典类型
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
6、获取新创建数据自增ID
import pymysql
# 创建连接
conn = pymysql.connect(port=3306, user='root', passwd='hilda1106', db='test', charset='utf8')
# 创建游标
cursor = conn.cursor()
effect_row = cursor.executemany('insert into tb1(namename) values(%s)', [('ooo'),('ooo'),('ooo')])
print(effect_row)
# 提交,不然无法保存新建或者修改的数据
conn.commit()
#获取最新自增ID
new_id = cursor.lastrowid
print(new_id)
# 关闭游标
cursor.close()
# 关闭连接
conn.close()