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 ...
随机推荐
- QQ小程序支付
QQ小程序支付 Java后端 同学折腾QQ小程序的支付折腾了好几天,没有完成统一下单,因为我做过微信和支付宝支付,他就让我帮忙搞 我搞了好两三个小时,也没搞出来,最终我觉得问题在商户key那里,问了几 ...
- K:剑指offer-56 题解 谁说数字电路的知识不能用到算法中?从次数统计到数字电路公式推导,一文包你全懂
前言: 本题解整理了一位大佬在leetcode中的代码的方法,该博文致力于让所有人都能够能够看懂该方法.为此,本题解将从统计数字出现次数的解题方式开始讲起,再推导出逐位统计的解题方式,期望以循序渐进的 ...
- python3正则提取字符串里的中文
# -*- coding: utf-8 -*- import re #过滤掉除了中文以外的字符 str = "hello,world!!%[545]你好234世界..." str ...
- hdu1686kmp果题
kmp字符串匹配原理参考博客:https://blog.csdn.net/bqw18744018044/article/details/90516750 代码如下:(写一遍模板) #include&l ...
- 基础的linux命令(一)
我练习使用的 Linux 系统是 CentOS 7 它是通过把 RHEL 系统重新编译并发布给用户免费使用的 Linux 系统. 首先你需要一台Linux虚拟机,如果没有,也没关系,点这里 一.命令格 ...
- 计算几何-Minimum Area Rectangle II
2020-02-10 21:02:13 问题描述: 问题求解: 本题由于可以暴力求解,所以不是特别难,主要是用来熟悉计算几何的一些知识点的. public double minAreaFreeRect ...
- 「面试指南」JS数组Array常用算法,Array算法的一般解答思路
先看一道面试题 在 LeetCode 中有这么一道简单的数组算法题: // 给定一个整数数组 nums 和一个目标值 target, // 请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下 ...
- Python第五章-内置数据结构02-列表
Python 内置的数据结构 二.列表(list) 想一想: 前面学习的字符串可以用来存储一串信息,那么想一想,怎样存储咱们班所有同学的名字呢? 定义100个变量,每个变量存放一个学生的姓名可行吗?有 ...
- 【转】.strip().split('t')和.strip().split()
https://blog.csdn.net/qq_35290785/article/details/94780620 .strip().split('t')line =' nihao, zhenhao ...
- pywin32解析office文档
from win32com.client import Dispatch xlApp = Dispatch("Excel.Application") xlApp.Visible = ...