码迷,mamicode.com
首页 > 数据库 > 详细

Python操作MySQL(1)

时间:2019-04-18 18:38:06      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:not   creat   type   arch   接口   value   sele   password   取数据   

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(1)

标签:not   creat   type   arch   接口   value   sele   password   取数据   

原文地址:https://blog.51cto.com/13496943/2380913

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!