python操作mysql
来源:互联网 发布:程序猿 知乎 编辑:程序博客网 时间:2024/06/15 13:48
在python2.7种主要用的是MySQLdb模块,在python3.X版本中用的是pymysql模块,两者的用法是完全一样的,就是名字不同而已。安装模块的方法主要是用pip命令,下面我用pymysql模块做分析。
一、数据库信息
#!/usr/bin/env python#-*- coding:utf-8 -*-import pymysqlPY_MYSQL_CONN_DICT = { "host": '127.0.0.1', "port": 3306, "user": 'root', "passwd": 'root', "db": 'test', "charset": 'utf8'}
二、连接和关闭数据库
#连接数据库conn = pymysql.connect(**PY_MYSQL_CONN_DICT) #连接数据库cursor = conn.cursor() #创建游标,后面针对数据库的操作主要是用游标#关闭数据库连接conn.commit() #这个命令主要是如果对数据进行了更新或者添加或者删除操作,通过提交才能同步到数据库cursor.close() #关闭游标conn.close() #关闭连接#=================比较完整的命令=================#!/usr/bin/env python#-*- coding:utf-8 -*-import pymysqlPY_MYSQL_CONN_DICT = { "host": '127.0.0.1', "port": 3306, "user": 'root', "passwd": 'root', "db": 'test', "charset": 'utf8'}conn = pymysql.connect(**PY_MYSQL_CONN_DICT) #连接数据库cursor = conn.cursor() #创建游标#对数据库的操作sql = "要执行的sql语句"cursor.execute(sql) #执行sqlcursor.fetchall() #通过执行sql,获取所有返回的信息#cursor.fetchone() #通过执行sql,获取返回信息中的一条conn.commit() #如果只是查询操作,这个命令可以不用加cursor.close()conn.close()
三、操作数据库(主要是通过游标实现)
1、增
①字符串拼接的SQL,可以执行,一般不用这样用inp = input('请输入班级:')sql = 'insert into class(caption) values("%s")'sql = sql % (inp,)cursor.execute(sql)②参数传递,推荐用这种inp = input('请输入班级:')#cursor.execute('insert into class(caption) values("%s")',inp) #这样在数据库插入的格式会变成 '内容'cursor.execute('insert into class(caption) values(%s)',inp) #这样在数据库插入的格式是我们想要的③传入多个参数cursor.execute('insert into class(id,caption,school) values(%s,%s,%s)',(1,'094班','WuHan')) #以元组形式出入④插入多条数据,用executemanyinfo = [(1,'094班','WuHan'),(2,'095班','WuHan'),(3,'096班','WuHan'),]cursor.executemany('insert into class(id,caption,school) values(%s,%s,%s)',info)
2、删
cursor.execute('delete from class where uid=%s',(1,))
3、改
cursor.execute('update class set caption=%s where uid=%s',('093班',1))
备注:
1、在执行完fetchone后,游标的相对和绝对位置
cursor.scroll(0,mode='absolute') #游标绝对位置cursor.scroll(0,mode='relative') #游标相对位置
2、通过sql字符串拼接,导致sql注入的形式
sql = sql % ('095班" or 1=1 --',2)#这样主要是因为sql的注释为 '--'
四、生成中操作
在生成过程中,如果操作一条sql就建立一次tcp的链接,这样对数据库的性能消耗是比较大的,所以我们一般采用单例模式,即将连接的状态保存下来,后面在调用的时候直接调用这个状态。
#!/usr/bin/env python#-*- coding:utf-8 -*-import pymysqlPY_MYSQL_CONN_DICT = { "host": '127.0.0.1', "port": 3306, "user": 'root', "passwd": 'root', "db": 'test', "charset": 'utf8'}#将连接mysql的状态写成一个类class DbConnection(object): def __init__(self): self.__conn_dict = PY_MYSQL_CONN_DICT self.conn = None self.cursor = None def connect(self, cursor=pymysql.cursors.DictCursor): self.conn = pymysql.connect(**self.__conn_dict) self.cursor = self.conn.cursor(cursor=cursor) return self.cursor def close(self): self.conn.commit() self.cursor.close() self.conn.close()#调用class PermissionRepository(object): def __init__(self): self.db_conn = DbConnection() def add(self, **kwargs): cursor = self.db_conn.connect() sql = """ insert into permission(%s) values(%s)""" key_list = [] value_list = [] for k, v in kwargs.items(): key_list.append(k) value_list.append('%%(%s)s' % k) #%的转义符在mysql中必须是% sql = sql % (','.join(key_list), ','.join(value_list)) cursor.execute(sql, kwargs) self.db_conn.close() def fetch_all(self): cursor = self.db_conn.connect() sql = """要执行的sql语句""" cursor.execute(sql) result = cursor.fetchall() #result = cursor.fetchone() 获取查询结果中的一条数据 #result = cursor.fetchmany() 获取查询结果中的多条数据 self.db_conn.close() return result
拓展知识:
python动态导入模块
import importlibfunc_name = 'add'module = 'src.commons'm = importlib.import_module(module)func = getattr(m,func_name)func()print(m)
阅读全文
0 0
- [python]Python操作MySQL
- python操作mysql
- Python操作MySQL
- Python操作Mysql数据库
- python操作MySQL
- python 操作mysql
- python操作mysql
- python操作mysql例子
- python操作mysql
- Python操作Mysql
- Python操作Mysql
- Python操作Mysql
- python操作MySQL数据库
- python操作MySQL数据库
- 用Python操作Mysql
- python操作mysql
- python操作MySQL数据库
- python操作MySQL数据库
- redis如何做到和mysql数据库的同步
- Unity3D开发简单化
- JavaScript学习-DOM
- 基于织物的生物电池可以为未来的可穿戴设备提供动力
- mysql字段varchar设置区分大小写(敏感)
- python操作mysql
- Electron 环境配置和“Helloworld”
- C++ list的基本操作和使用
- 安装MAVEN(JDK1.8和Maven3.5)
- 易百教程
- 直通BAT算法精讲附程序源码
- Nexus3.6 window版私服搭建 安装、配置教程
- Android 单例模式 封装 Okhttp + RxJava 网络请求(get和post)
- linux安装软件的几种方法