Mysql-python连接操作数据库
使用python连接操作数据库
–》下载配置python环境
–》推荐安装PyMySQL 库:PyMySQL 是一个纯Python 实现的MySQL 客户端操作库,支持事务、存储过程、批量执行等
使用命令:pip install pymysql
–》连接数据库脚本
1 # 导入模块 2 import pymysql 3 # 连接数据库 4 conn = pymysql.connect( 5 host=\'localhost\', 6 port=3306, 7 user=\'root\', 8 password=\'123456\', 9 db=\'ceshi1\', 10 charset=\'utf8\' 11 ) 12 # 游标对象:用于执行查询和获取结果 13 cursor = conn.cursor() 14 15 sql = \'select * from student\' 16 # execute()方法:执行sql语句、将结果从数据库获取到客户端 17 rows = cursor.execute(sql) 18 # 关闭指针,并释放资源 19 cursor.close() 20 # 关闭数据库连接,并释放资源 21 conn.close() 22 23 if rows >= 0: 24 print(\'数据库连接成功\') 25 else: 26 print(\'数据库连接失败\')
–》新增单条数据脚本
1 import pymysql 2 3 conn = pymysql.connect( 4 host=\'localhost\', 5 port=3306, 6 user=\'root\', 7 password=\'123456\', 8 db=\'ceshi1\', 9 charset=\'utf8\' 10 ) 11 cursor=conn.cursor() 12 sql = "insert into student(studentNo,name_1,class) values(\'010\',\'测试人员1\',\'测试1班\')" 13 rows = cursor.execute(sql) 14 # 提交当前事务 15 conn.commit() 16 cursor.close() 17 # 关闭数据库连接 18 conn.close()
–》新增多条数据脚本
1 # 新增多条executemany 2 import pymysql 3 # 连接数据库 4 conn = pymysql.connect( 5 host=\'localhost\', 6 port=3306, 7 user=\'root\', 8 password=\'123456\', 9 db=\'ceshi1\', 10 charset=\'utf8\' 11 ) 12 cursor=conn.cursor() 13 # sql = \'INSERT INTO 表名 VALUES(%s,%s,%s)\' 无论什么类型,都使用%s作为占位符 14 # rows=cursor.executemany(sql,param) 15 # param = ((username1, salt1, pwd1), (username2, salt2, pwd2), (username3, salt3, pwd3)) 16 sql = \'insert into student(studentNo,name_1,class) values(%s,%s,%s)\' 17 param =((\'011\',\'多条新增1\',\'新增1班\'),(\'012\',\'多条新增2\',\'新增2班\'),(\'013\',\'多条新增3\',\'新增3班\')) 18 rows = cursor.executemany(sql,param) 19 # 提交当前事务 20 conn.commit() 21 cursor.close() 22 # 关闭数据库连接 23 conn.close()
–》使用pymysql.cursors.DictCursor类批量添加数据
1 import pymysql 2 # 连接数据库 3 conn = pymysql.connect( 4 host=\'localhost\', 5 port=3306, 6 user=\'root\', 7 password=\'123456\', 8 db=\'ceshi1\', 9 charset=\'utf8\' 10 ) 11 # pymysql获取数据时提供了fetchone()和fetchall()函数来获取结果集,这俩种函数在处理大数据量时会消耗大量内存 12 # pymysql.cursors.DictCursor类,SSCursor游标类用来解决数据量大的问题 13 cursor=conn.cursor(pymysql.cursors.DictCursor) 14 param = [] 15 16 for i in range(1,100): 17 param.append([i,\'批量1\',\'批量\']) 18 19 try: 20 sql = "insert into student(studentNo,name_1,class) values(%s,%s,%s)" 21 # 批量操作 22 cursor.executemany(sql,param) 23 conn.commit() 24 except Exception as e: 25 print(e) 26 conn.rollback()
–》修改单条数据脚本
1 # 导入模块 2 import pymysql 3 # 连接数据库 4 conn = pymysql.connect( 5 host=\'localhost\', 6 port=3306, 7 user=\'root\', 8 password=\'123456\', 9 db=\'ceshi1\', 10 charset=\'utf8\' 11 ) 12 # 游标对象:用于执行查询和获取结果 13 cursor = conn.cursor() 14 15 sql = \'update student set class = %s where studentNo = %s\' 16 # execute()方法:执行sql语句、将结果从数据库获取到客户端 17 rows = cursor.execute(sql,(\'修改数据\',\'10\')) 18 conn.commit() 19 # 关闭指针,并释放资源 20 cursor.close() 21 # 关闭数据库连接,并释放资源 22 conn.close()
–》修改多条数据脚本
1 # 导入模块 2 import pymysql 3 # 连接数据库 4 conn = pymysql.connect( 5 host=\'localhost\', 6 port=3306, 7 user=\'root\', 8 password=\'123456\', 9 db=\'ceshi1\', 10 charset=\'utf8\' 11 ) 12 # 游标对象:用于执行查询和获取结果 13 cursor = conn.cursor() 14 15 sql = \'update student set class = %s where studentNo = %s\' 16 rows = cursor.executemany(sql,[(\'多条数据1\',\'10\'),(\'多条数据2\',\'11\')]) 17 conn.commit() 18 # 关闭指针,并释放资源 19 cursor.close() 20 # 关闭数据库连接,并释放资源 21 conn.close()
–》删除数据脚本,与新增脚本大致相同,只需要修改sql语句即可
1 # 删除单条sql 2 sql=\'delete from student where class= %s\' 3 rows=cursor.execute(sql,(\'10\',))
1 # 删除多条sql 2 sql=\'delete from student where calss= %s\' 3 rows=cursor.executemany(sql,[(\'11\'),(\'12\')])
–》查询数据脚本,与新增脚本大致相同,只需要修改sql语句即可
使用fetchone()、fetchall()、fetchmany函数,查询数据存在内存中
1 # 游标对象:用于执行查询和获取结果 2 cursor = conn.cursor(pymysql.cursors.DictCursor) 3 4 sql = \'select * from student\' 5 rows = cursor.execute(sql) 6 # fetchone() 7 print(cursor.fetchone()) 8 print(cursor.fetchone()) 9 print(cursor.fetchone()) 10 # fetchall() 11 # print(cursor.fetchall())
# print(cursor.fetchmany(2)) 12 conn.commit() 13 # 关闭指针,并释放资源 14 cursor.close() 15 # 关闭数据库连接,并释放资源 16 conn.close()
fetchone()运行结果
fetchall()运行结果
fetchmany()运行结果
–》cursor游标移动脚本
1 # 第一个值为移动的行数,整数为向下移动,负数为向上移动,mode指定了是相对当前位置移动,还是相对于首行移动 2 cursor.scroll(1,mode=\'relative\') # 相对当前位置移动 3 cursor.scroll(2,mode=\'absolute\') # 相对绝对位置移动