python操作MySQL数据库报错问题解决
编写好Python操作数据库的脚本后,运行报错如下:
报错1:“AttributeError: 'NoneType' object has no attribute 'encoding'”
解决办法:设置charset时要用utf8,不能用utf-8
if link_type == 0:
# 创建数据,返回字典
self.conn = pymysql.connect(host=host_db, user=user_db, password=password_db, db=name_db, port=port_db,
charset='utf8', cursorclass=pymysql.cursors.DictCursor)
else:
# 创建数据库,返回元祖
self.conn = pymysql.connect(host=host_db, user=user_db, password=password_db, db=name_db, port=port_db,
charset='utf8')
报错2:“AttributeError: 'OperationDbInterface' object has no attribute 'cur'”
错误原因:编写代码时,换行时没有对齐,导致调用cur时报错
贴上Python操作mysql数据库的源码:
# coding:utf8 '''
定义对mysql数据库操作的封装
1、包括基本的单条语句操作,如删除、修改、插入
2、独立地查询单条、多条数据
3、独立地添加多条数据
''' import logging, os, pymysql
from public import config class OperationDbInterface(object):
# 定义初始化数据库连接
def __init__(self, host_db='127.0.0.1', user_db='root', password_db='',
name_db='interface_test', port_db=3306, link_type=0):
'''
:param host_db: 数据库服务主机IP
:param user_db: 数据库连接用户名
:param password_db: 数据库密码
:param name_db: 数据库名称
:param port_db: 数据库端口号,整型数据
:param link_type: 连接类型,用于设置输出数据是元祖还是字典,默认是字典,link_type=0
:return:游标
'''
try:
if link_type == 0:
# 创建数据,返回字典
self.conn = pymysql.connect(host=host_db, user=user_db, password=password_db, db=name_db, port=port_db,
charset='utf8', cursorclass=pymysql.cursors.DictCursor)
else:
# 创建数据库,返回元祖
self.conn = pymysql.connect(host=host_db, user=user_db, password=password_db, db=name_db, port=port_db,
charset='utf8')
self.cur = self.conn.cursor()
print("输出:%s" % self.cur)
except pymysql.Error as e:
print("创建数据库连接失败|Mysql Error %d: %s" % (e.args[0], e.args[1]))
logging.basicConfig(filename=config.src_path + '/log/syserror.log', level=logging.DEBUG,
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s')
logger = logging.getLogger(__name__)
logger.exception(e) # 定义单条数据操作,包含删除和更新操作
def op_sql(self, condition):
'''
:param condition: sql语句,该通用方法可用来替代updateone,deleteone
:return: 字典形式
''' try:
self.cur.execute(condition) # 执行sql语句
self.conn.commit() # 提交游标数据
result = {'code': '', 'message': '执行通用操作成功', 'data': []}
except pymysql.Error as e:
self.conn.rollback() # 执行回滚操作
result = {'code': '', 'message': '执行通用操作异常', 'data': []}
print("数据库错误|op_sql %d:%s" % (e.args[0], e.args[1]))
logging.basicConfig(filename=config.src_path + '/log/syserror.log', level=logging.DEBUG,
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s')
logger = logging.getLogger(__name__)
logger.exception(e)
return result # 查询表中单条数据
def select_one(self, condition):
'''
:param condition: 查询单条sql语句
:return: 字典形式的单条查询语句
''' try:
rows_affect = self.cur.execute(condition)
if rows_affect > 0:
results = self.cur.fetchone() # 获取一条数据
result = {'code': '', 'message': '执行单条查询操作成功', 'data': results}
else:
result = {'code': '', 'message': '执行单条查询操作成功', 'data': []}
except pymysql.Error as e:
self.conn.rollback() # 执行回滚操作
result = {'code': '', 'message': '执行单条查询异常', 'data': []}
print("数据库错误|select_one %d: %s" % (e.args[0], e.args[1]))
logging.basicConfig(filename=config.src_path + '/log/syserror.log', level=logging.DEBUG,
format='%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s %(message)s')
logger = logging.getLogger(__name__)
logger.exception(e)
return result # 查询表中多条数据
def select_all(self, condition):
'''
:param condition: sql语句
:return: 字典形式的批量查询结果
''' try:
rows_affect = self.cur.execute(condition)
if rows_affect > 0:
# 将鼠标光标放回到初始位置
self.cur.scroll(0, mode='absolute')
# 返回游标中所有结果
results = self.cur.fetchall()
result = {'code': '', 'message': '执行批量查询操作成功', 'data': results}
else:
result = {'code': '', 'message': '执行批量查询操作成功', 'data': []}
except pymysql.Error as e:
# 执行回滚操作
self.conn.rollback()
result = {'code': '', 'message': '执行批量查询异常', 'data': []}
logging.basicConfig(filename=config.src_path + '/log/syserror.log', level=logging.DEBUG,
format='%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s %(message)s')
logger = logging.getLogger(__name__)
logger.exception(e)
return result # 定义表中插入数据操作的方法
def insert_data(self, condition, params):
'''
:param condition: 插入语句
:param params: 插入数据,列表形式[(,,,),(,,,)]
:return: 字典形式批量插入数据结果
'''
try:
results = self.cur.executemany(condition, params) # 返回插入数据的条数
self.conn.commit()
result = {'code': '', 'message': '执行批量插入数据成功', 'data': results}
except pymysql.Error as e:
self.conn.rollback() # 执行回滚操作
result = {'code': '', 'message': '执行批量插入数据异常', 'data': []}
print("数据库错误|insert_data %d: %s" % (e.args[0], e.args[1]))
logging.basicConfig(filename=config.src_path + '/log/syserror.log', level=logging.DEBUG,
format='%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s %(massage)s')
logger = logging.getLogger(__name__)
logger.exception(e)
return result # 关闭数据库
def __del__(self):
if self.cur is not None:
self.cur.close() # 关闭游标
if self.conn is not None:
self.conn.close() # 释放数据库资源 if __name__ == "__main__":
test = OperationDbInterface() # 实例化类
result_select_all = test.select_all("select * from config_test") # 查询所有数据
result_select_one = test.select_one("select * from config_test where id=1") # 查询单条数据
result_oP_sql = test.op_sql("UPDATE config_test SET value_config='修改后的valuetest' WHERE id=1") # 通用操作,修改数据库
result__insert_sql = test.insert_data(
"insert into config_test (key_config, value_config, description, status) values (%s, %s, %s, %s)",
[('mytest1', 'mytestvalue1', '我插入的测试数据1', 1), ('mytest2', 'mytestvalue2', '我插入的测试数据2', 0)])
print(result_select_all['data'], result_select_all['message'])
print(result_select_one['data'], result_select_one['message'])
print(result_oP_sql['data'], result_oP_sql['message'])
print(result__insert_sql['data'], result__insert_sql['message'])
python操作MySQL数据库报错问题解决的更多相关文章
- python操作三大主流数据库(1)python操作mysql①windows环境中安装python操作mysql数据库的MySQLdb模块mysql-client
windows安装python操作mysql数据库的MySQLdb模块mysql-client 正常情况下应该是cmd下直接运行 pip install mysql-client 命令即可,试了很多台 ...
- python操作mysql数据库的常用方法使用详解
python操作mysql数据库 1.环境准备: Linux 安装mysql: apt-get install mysql-server 安装python-mysql模块:apt-get instal ...
- python操作mysql数据库的相关操作实例
python操作mysql数据库的相关操作实例 # -*- coding: utf-8 -*- #python operate mysql database import MySQLdb #数据库名称 ...
- Windows下安装MySQLdb, Python操作MySQL数据库的增删改查
这里的前提是windows上已经安装了MySQL数据库,且配置完成,能正常建表能操作. 在此基础上仅仅需安装MySQL-python-1.2.4b4.win32-py2.7.exe就ok了.仅仅有1M ...
- 使用python操作mysql数据库
这是我之前使用mysql时用到的一些库及开发的工具,这里记录下,也方便我查阅. python版本: 2.7.13 mysql版本: 5.5.36 几个python库 1.mysql-connector ...
- 连接mysql数据库报错java.sql.SQLException: The server time zone value '�й���ʱ��' is unrecognized...解决方法
今天连接mysql数据库报错如下: java.sql.SQLException: The server time zone value '�й���ʱ��' is unrecognized or r ...
- python操作mysql数据库增删改查的dbutils实例
python操作mysql数据库增删改查的dbutils实例 # 数据库配置文件 # cat gconf.py #encoding=utf-8 import json # json里面的字典不能用单引 ...
- python 操作mysql数据库之模拟购物系统登录及购物
python 操作mysql数据库之模拟购物系统登录及购物,功能包含普通用户.管理员登录,查看商品.购买商品.添加商品,用户充值等. mysql 数据库shop 表结构创建如下: create TAB ...
- 【Python】使用python操作mysql数据库
这是我之前使用mysql时用到的一些库及开发的工具,这里记录下,也方便我查阅. python版本: 2.7.13 mysql版本: 5.5.36 几个python库 1.mysql-connector ...
随机推荐
- Django之CBV装饰器,跨站请求伪造,auth认证
CBV加装饰器 基于session实现登录 def login(request): if request.method == 'POST': username = request.POST.get(' ...
- 补充JavaScript
1 JavaScript概述 1.1 ECMAScript和Javascript的关系 1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript提交给国际标准 ...
- ASP.NET Core 奇淫技巧之伪属性注入
一.前言 开局先唠嗑一下,许久未曾更新博客,一直在调整自己的状态,去年是我的本命年,或许是应验了本命年的多灾多难,过得十分不顺,不论是生活上还是工作上.还好当我度过了所谓的本命年后,许多事情都在慢慢变 ...
- 国内外主要的PHP开源CMS系统分析
国内PHP开源CMS内容管理系统从程序框架,模版加载到程序功能上都有很大的进步,大部分都采用了自定义模块,自定义模型的方式,同时提供各个CMS都提供不同的特色功能,CMS内容管理系统一直影响着互联网的 ...
- 字节转换函数 htonl*的由来与函数定义...
字节转换字符由来: 在网络上面有着许多类型的机器,这些机器在表示数据的字节顺序是不同的, 比如i386芯片是低字节在内存地址的低端, intel处理器将32位的整数分4个连续的字节,并以字节序1-2- ...
- 十个python图像处理工具
介绍 如今的世界存在了大量的数据,图像数据是重要的组成部分.如果要利用这些图片,需要对图像进行处理,提高图片质量或提取图片内容信息. 图像处理的常见操作包括图像显示,基本操作如裁剪,翻转,旋转等,图像 ...
- Tensorflow实现MNIST手写数字识别
之前我们讲了神经网络的起源.单层神经网络.多层神经网络的搭建过程.搭建时要注意到的具体问题.以及解决这些问题的具体方法.本文将通过一个经典的案例:MNIST手写数字识别,以代码的形式来为大家梳理一遍神 ...
- 11g数据库使用DBUA升级Exadata数据库至12c
DB Name: GRPSource DB: 11.2.0.3 Target DB: 12.1.0.2 11g数据库使用DBUA升级Exadata数据库至12c前提条件: 0.需要11g源数据库fu ...
- IC设计流程概述
芯片设计分为前端设计和后端设计,前端设计(也称逻辑设计)和后端设计(也称物理设计)并没有统一严格的界限,涉及到与工艺有关的设计就是后端设计. Front-end design flow 1. 规格制定 ...
- 多线程学习笔记(五)---- 在JDK文档的使用
1.前言 我们经常在JDK文档中见到一些类上的介绍说,该类是"安全的"."不安全"."效率高"."效率低"的词眼.这里, ...