Python操作MySQL(1)
2019-04-18 16:46
741 查看
Python操作MySQL Python DB-API Python标准数据接口为Python DB-API,其提供了数据库应用编程接口. Python DB-API使用流程: 引用API模块 获取与数据库的连接 执行sql语句与存储过程 关闭数据库连接 安装pymysql pymysql是用于Python连接mysql数据库的接口,它实现了Python数据库API规范V2.0,基于 MySQL C API 上建立的。 连接数据库 连接数据库前,必须确保以下事项: 1. 已经安装了mysql服务端; 2. 已经创建了数据库、数据表、表中添加了数据; 3. 连接数据库使用的用户名、密码,以及数据库服务所在机器的ip,端口号、 用户拥有访问数据的权限; 4. 你的机器上已经安装了Python pymysql模块 pymysql.connect() 连接数据库 conn = MySQLdb.connect( host = ip, user = username, passwd = password, db = database charset=encoding ) host:mysql服务所在机器的ip; port:表示连接所使用的端口号; user:连接数据库时所用的用户名; passwd:连接数据库时所使用的用户的密码; db:要连接数据库的库名; charset:连接数据时使用的编码; 示例: #encoding=utf-8 import pymysql conn = pymysql.connect( host = "127.0.0.1", port = 3306, user = "root", passwd = "123456", db = "hhq", charset = "utf8" ) print(conn) print(type(conn)) conn.cusor()获取游标 要想操作数据库,光连接数据库是不够,必须拿到操作数据库的游标,才能进行后续的操作,比如读取数据,添加数据等。通过获取到的数据库连接实例conn下的cursor()方法来创建游标。游标用来接收返回结果 #encoding=utf-8 import pymysql conn = pymysql.connect( host = "127.0.0.1", port = 3306, user = "root", passwd = "123456", db = "hhq", charset = "utf8" ) # 使用cursor()方法获取数据库的操作游标 cursor = conn.cursor() print(cursor) print(type(cursor)) 注意: cursor()返回一个游标实例对象,其中内置了很多操作数据的方法,比如执行sql语句; 执行sql语句方法execute和executemany。 execute(query, args=None) execute执行单条sql语句,成功后返回受影响的行数,整型; 参数说明: • query:要执行的sql语句,字符串类型。 • args:可选的序列或映射,用于query的参数值。如果args为序列,query中必须使用%s做占位符;如果args为映射,query中必须使用%(key)s做占位符 executemany (query, args) 该方法用于批量执行sql语句,比如批量插入数据,返回受影响的行数,整型。 参数说明: • query:要执行的sql语句,字符串类型。 • args:嵌套的序列或映射,用于query的参数值。 数据库性能瓶颈很大一部份就在于网络IO和磁盘IO,将多个sql语句放在一起,只执行一次IO,可以有效的提升数据库性能。推荐此方法 注意: 用executemany()方法一次性批量执行sql语句,固然很好,但是当数据一次传入过多到 server端,可能造成server端的buffer溢出,也可能产生一些意想不到的麻烦。所以,合理、分批次使用executemany是个合理的办法 建库 #encoding=utf-8 import pymysql try: conn = pymysql.connect( host = "127.0.0.1", port = 3306, user = "root", passwd = "123456", #db = "hhq", charset = "utf8" ) cursor = conn.cursor() sql = "create database if not exists testdb default charset utf8 collate utf8_general_ci;" cursor.execute(sql) cursor.close() print("数据库创建成功!") conn.close() except pymysql.Error as e: print("mysql Error %d : %s" %(e.args[0],e.args[1])) 建表 #encoding=utf-8 import pymysql try: conn = pymysql.connect( host = "127.0.0.1", port = 3306, user = "root", passwd = "123456", #db = "hhq", charset = "utf8" ) conn.select_db("pydb") # 此处选择数据库python,connect函数就不需要指定db参数 cursor = conn.cursor() #如果数据库表存在则删除 cursor.execute("drop table if exists user;") sql =""" create table user( id int default null, name varchar(10) default null, age int default null )""" cursor.execute(sql) #先关闭游标 cursor.close() #再关闭数据库连接 conn.close() print("数据表创建成功!") except pymysql.Error as e: print("mysql Error %d : %s" %(e.args[0],e.args[1])) 插入单条数据: #encoding=utf-8 import pymysql try: conn = pymysql.connect( host = "127.0.0.1", port = 3306, user = "root", passwd = "123456", #db = "hhq", charset = "utf8" ) conn.select_db("pydb") cursor = conn.cursor() sql = "insert into user values(2,'张三',20);" cursor.execute(sql) # 另一种插入数据方法,通过格式字符串传入值 sql2 = "insert into user values(%s,%s,%s)" cursor.execute(sql2,(3,"李四",25))#这里需要传入参数组成的元组 cursor.close() conn.commit() conn.close() print("数据插入成功!") except pymysql.Error as e: print("mysql Error %d : %s" %(e.args[0],e.args[1])) 批量插入数据 #encoding=utf-8 import pymysql try: conn = pymysql.connect( host = "127.0.0.1", port = 3306, user = "root", passwd = "123456", #db = "hhq", charset = "utf8" ) conn.select_db("pydb") cursor = conn.cursor() sql = "insert into user values(%s,%s,%s)" #executemany的参数可以传入列表,返回受影响的行数 cursor.executemany(sql, [(4,"tom",21), (5,"lucy",22), (6,"robert",25), (7,"mimi",18)]) cursor.close() conn.commit() conn.close() print("数据插入成功!") except pymysql.Error as e: print("mysql Error %d : %s" %(e.args[0],e.args[1])) 批量执行sql语句使用的是executemany(sql, args)函数,返回受影响的行数。Args参数是一个包含多个元组的列表,每个元组对应mysql中的一条数据。注意,这里的%s不需要加引号,否则插入数据的数据会类型错误 练习:插入100条数据 方式1: #encoding=utf-8 import random import pymysql try: conn = pymysql.connect( host = "127.0.0.1", port = 3306, user = "root", passwd = "123456", #db = "hhq", charset = "utf8" ) conn.select_db("pydb") cursor = conn.cursor() sql = "insert into user values(%s,%s,%s)" for i in range(100): cursor.execute(sql,(i,"tom" + str(i),random.randint(20,30))) cursor.close() conn.commit() conn.close() print("数据插入成功!") except pymysql.Error as e: print("mysql Error %d : %s" %(e.args[0],e.args[1])) 方式2: #encoding=utf-8 import random import pymysql try: conn = pymysql.connect( host = "127.0.0.1", port = 3306, user = "root", passwd = "123456", #db = "hhq", charset = "utf8" ) conn.select_db("pydb") cursor = conn.cursor() sql = "insert into user values(%s,%s,%s)" res = cursor.executemany(sql,[(i+100,"lucy" + str(i),random.randint(20,30)) for i in range(100)]) cursor.close() conn.commit() conn.close() print("插入成功%s 条" %res) print("数据插入成功!") except pymysql.Error as e: print("mysql Error %d : %s" %(e.args[0],e.args[1]))
相关文章推荐
- python使用变量操作mysql语句
- python 03 入门和操作mysql
- python操作mysql
- Python操作MySQL以及中文乱码的问题_mengl_2011-ChinaUnix博客
- 用python简单实现类似thinkphp的针对Mysql操作的数据模型
- [Python]操作Mysql
- Python操作MySQL
- Python操作MySQL以及中文乱码的问题
- python操作mysql
- Python2.7简单连接与操作MySQL的方法
- Python 操作 MySQL 的5种方式(转)
- python 3 mysql操作
- 关于python操作mysql
- MySQL-python操作数据库
- Python连接MySql(.py文件直接操作MySql)
- PYTHON操作MYSQL时防止SQL注入
- Python&MySQL操作过程中遇到的编码问题
- Python 操作 MySQL
- python数据库操作 - MySQL入门【转】
- Mysql入门笔记(2):Python操作MySQL数据库9个实用实例