5、第八周 - 网络编程进阶 - Python 连接 Mysql

Python操作MySQL主要使用两种方式:
原生模块:pymsql 其中pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同。
ORM框架:SQLAchemy

Mysql pymysql 基本步骤

1、pymysql 基本结构语法如下:

import pymysql

#创建连接
conn = pymysql.connect(host=‘10.10.28.5‘,port=3306,user=‘chen‘,passwd=‘Chen1203..‘,db=‘school‘,charset="utf8")

#创建游标
cursor = conn.cursor() #创建当前数据的游标

#执行SQL,并返回影响行数,常规的数据库操作命令:select、update、insert
#cursor.execute("insert into a (number) VALUES (1203)")

#执行SQL,并返回影响行数,执行多次
cursor.executemany("insert into a (number) VALUES (%s)",[("1000"),("1001"),("1002")])
cursor.execute("select * from a  ")
#output = cursor.fetchmany(3) #根据执行SQL的返回,读取前面三个数字
#output = cursor.fetchone()   #根据执行SQL的返回,读取一个数字
output = cursor.fetchall()    #根据执行SQL的返回,进行全部打印
print(output)

#提交,不然无法保存新建或者修改数据
conn.commit()
#关闭游标
cursor.close()
#关闭连接
conn.close()

输出:
( (1203,), (1203,), (1203,), (1203,), (1000,), (1001,), (1002,))

注:存在中文的时候,连接需要添加charset=‘utf8‘,否则中文显示乱码。

2、获取新建数据的自增ID号

import pymysql

#创建连接
conn = pymysql.connect(host=‘103.66.55.234‘,port=3306,user=‘chen‘,passwd=‘Chen1203..‘,db=‘school‘,charset="utf8")

#创建游标
cursor = conn.cursor() #创建当前数据的游标

#执行SQL,并返回影响行数,常规的数据库操作命令:select、update、insert
#cursor.execute("insert into a (number) VALUES (1203)")

#执行SQL,并返回影响行数,执行多次
cursor.executemany("insert into chen (name) VALUES (%s)",[("qing4"),("qing5"),("qing6")])

#提交,不然无法保存新建或者修改数据
conn.commit()
#关闭游标
cursor.close()
#关闭连接
conn.close()

new_id = cursor.lastrowid #获取自增id
print (new_id)

3、移动游标

操作都是靠游标,那对游标的控制也是必要的

注:在fetch数据时按照顺序进行,可以使用cursor.scroll(num,mode)来移动游标位置,如:
cursor.scroll(1,mode=‘relative‘) # 相对当前位置移动
cursor.scroll(2,mode=‘absolute‘) # 相对绝对位置移动

4、数据类型

关于默认获取的数据是元祖类型,如果想要或者字典类型的数据

import pymysql

#创建连接
conn = pymysql.connect(host=‘103.66.53.98‘,port=3306,user=‘chen‘,passwd=‘Chen1203..‘,db=‘school‘,charset="utf8")

#设置游标为字典类型
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
cursor.execute("select * from chen")

row = cursor.fetchall()
print(row)

#提交
conn.commit()
#关闭游标
cursor.close()
#关闭连接
conn.close()

5、调用存储过程

A、无参数存储过程

import pymysql

conn = pymysql.connect(host=‘127.0.0.1‘, port=3306, user=‘root‘, passwd=‘‘, db=‘tkq1‘)
#游标设置为字典类型
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
#无参数存储过程
cursor.callproc(‘p2‘)  #等价于cursor.execute("call p2()")

row_1 = cursor.fetchone()
print row_1

conn.commit()
cursor.close()
conn.close()

B、有参数的存储过程

import pymysql

conn = pymysql.connect(host=‘127.0.0.1‘, port=3306, user=‘root‘, passwd=‘‘, db=‘tkq1‘)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

cursor.callproc(‘p1‘, args=(1, 22, 3, 4))
#获取执行完存储的参数,参数@开头
cursor.execute("select @p1,@_p1_1,@_p1_2,@_p1_3")  #{u‘@_p1_1‘: 22, u‘@p1‘: None, u‘@_p1_2‘: 103, u‘@_p1_3‘: 24}
row_1 = cursor.fetchone()
print row_1

conn.commit()
cursor.close()
conn.close()

6、使用with简化连接过程

使用上下文管理,简化连接过程

import pymysql
import contextlib
#定义上下文管理器,连接后自动关闭连接
@contextlib.contextmanager
def mysql(host=‘127.0.0.1‘, port=3306, user=‘root‘, passwd=‘‘, db=‘tkq1‘,charset=‘utf8‘):
  conn = pymysql.connect(host=host, port=port, user=user, passwd=passwd, db=db, charset=charset)
  cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
  try:
    yield cursor
  finally:
    conn.commit()
    cursor.close()
    conn.close()

# 执行sql
with mysql() as cursor:
  print(cursor)
  row_count = cursor.execute("select * from tb7")
  row_1 = cursor.fetchone()
  print row_count, row_1

pymysql防注入:参考链接 https://www.cnblogs.com/wt11/p/6141225.html

原文地址:https://www.cnblogs.com/chen170615/p/9131151.html

时间: 2024-10-07 00:44:07

5、第八周 - 网络编程进阶 - Python 连接 Mysql的相关文章

3、第八周 - 网络编程进阶 - Redis消息缓存

Redis概念 Redis是主流的key-value nosql 数据库之一.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set --有序集合)和hash(哈希类型).这些数据类型都支持push/pop.add/remove及取交集并集和差集及更丰富的操作.,redis支持各种不同方式的排序.与memcached一样,为了保证效率,数据都是缓存在内存中.区别的是redis会周期性的把更新的数据

2、第八周 - 网络编程进阶 - 数据库类型的理解

前言 1.关系型数据库与非关系型数据库 A.什么是数据库? 数据库是数据的仓库.数据库与普通的文件系统的主要区别:数据库能快速查找对应的数据. B.什么是关系型数据库? 关系型数据库是依据关系模型来创建的数据库.所谓关系模型就是"一对一.一对多.多对多"等关系模型,关系模型就是指二维表格模型,因而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织.关系模型包括数据结构(数据存储的问题,二维表).操作指令集合(SQL语句).完整性约束(表内数据约束.表与表之间的约束). 常见的

4、第八周 - 网络编程进阶 - Mysql数据库操作

数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据.以下是关于数据库一些术语: 数据库: 数据库是一些关联表的集合.. 数据表: 表是数据的矩阵.在一个数据库中的表看起来像一个简单的电子表格. 列: 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据. 行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据. 冗余:存储两份数据,冗余可以使系统速度更快.例如不同表中的相同字段(表

Python连接MySQL数据库之pymysql模块使用

Python连接MySQL数据库之pymysql模块使用 Python3连接MySQL PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb. Django中也可以使用PyMySQL连接MySQL数据库. PyMySQL安装 pip install pymysql 连接数据库 注意事项 在进行本文以下内容之前需要注意: 你有一个MySQL数据库,并且已经启动. 你有可以连接该数据库的用户名和密码 你有一个有权限操作的datab

Python连接Mysql数据库(Debian)

Python连接Mysql数据库(Debian) 以下是Python 2.*版本的安装方法,MySQL-python暂不支持Python 3.*版本 提前要做的工作: 安装setuptools,在终端中运行 wget https://bootstrap.pypa.io/ez_setup.py -O - | sudo python 安装pip,下载“get_pip.py”,运行 python get_pip.py 运行如下命令装好必要的包 sudo apt-get install python-d

Python连接MySQL的实例代码

Python连接MySQL的实例代码 MySQLdb下载地址:http://sourceforge.net/projects/mysql-python/ 下载解压缩后放到%Python_HOME%/Lib/site-packages目录中,python会自动找到此包. MySQLdb基本上是MySQL C API的Python版,遵循Python Database API Specification v2.0. 其他: 1. 平台及版本 linux 内核2.6,gcc 3.4.4,glibc 2

python 连接mysql多层结构实例

一.python 连接mysql多层结构: 目录文件介绍: sqlexec             sql执行操作,例:增删改查 table                 数据库表模块 一个表一个模块 index.py            主文件 conf.py              数据库连接信息 目录结构如下: -rw-r--r-- 1 root root     167 Jun 22 20:36 conf.py-rw-r--r-- 1 root root     244 Jun 2

[笔记]--在Ubuntu系统用Python连接Mysql数据库

环境:Ubuntu11.10,Python2.7,Mysql5.0.95 在Ubuntu终端输入命令安装Python的Mysql模块 sudo apt-get install python-mysqldb 就这么简单: 运行一下脚本: #!/usr/bin/python #-*-coding=utf-8# # import MySQLdb cn = MySQLdb.Connection(host="192.168.88.124",user="root",passwd

python入门(十七)python连接mysql数据库

mysql 数据库:关系型数据库mysql:互联网公司 sqllite:小型数据库,占用资源少,手机里面使用oracle:银行.保险.以前外企.sybase:银行+通信 互联网公司key:valuemongodb:磁盘上redis:内存数据库,持久化memchache:内存数据库 mysql -uroot -p密码装完了之后,cmd下输入mysql命令,需要将安装目录下的bin目录( mysql.exe 所在的目录)加入到path中 本地连接 mysql -uroot -p mysql -h12