热门IT资讯网

Python操作MySQL(1)

发表于:2024-11-25 作者:热门IT资讯网编辑
编辑最后更新 2024年11月25日,Python操作MySQLPython DB-APIPython标准数据接口为Python DB-API,其提供了数据库应用编程接口.Python DB-API使用流程:引用API模块获取与数据库的连
Python操作MySQLPython DB-APIPython标准数据接口为Python DB-API,其提供了数据库应用编程接口.Python DB-API使用流程:引用API模块获取与数据库的连接执行sql语句与存储过程关闭数据库连接安装pymysqlpymysql是用于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 = databasecharset=encoding)host:mysql服务所在机器的ip;port:表示连接所使用的端口号;user:连接数据库时所用的用户名;passwd:连接数据库时所使用的用户的密码;db:要连接数据库的库名;charset:连接数据时使用的编码;示例:#encoding=utf-8import pymysqlconn = 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-8import pymysqlconn = 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-8import pymysqltry:    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-8import pymysqltry:    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-8import pymysqltry:    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-8import pymysqltry:    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-8import randomimport pymysqltry:    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-8import randomimport pymysqltry:    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]))
0