码迷,mamicode.com
首页 > 数据库 > 详细

python连接mysql数据库——版本问题

时间:2020-03-15 13:18:02      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:lib   ISE   遇到   mys   ioctl   connect   skin   rri   htm   

今天终于解决了使用python连接数据库不成功的问题,现将过程总结如下:

一、出现的问题

在使用python连接mysql数据库是一直出现如下问题:

1.只能连接到我数据库中的的第一个数据库,但是不能操作里面的表,会报错表不存在。(表是存在的)
2.更换其他数据库后,直接报错找不到该数据库。(数据库和表均存在)

运行连接数据库的代码,会出现:

conn = pymysql.connect(user=root, password=password, database=XXX)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "....\pymysql\__init__.py", line 88, in Connect
    return Connection(*args, **kwargs)
  File "......\pymysql\connections.py", line 678, in __init__
    self.connect()
  File "......\pymysql\connections.py", line 890, in connect
    self._request_authentication()
  File "......\pymysqlconnections.py", line 1097, in _request_authentication
    auth_packet = self._read_packet()
  File "......\pymysql\connections.py", line 965, in _read_packet
    packet.check_error()
  File "......\pymysql\connections.py", line 394, in check_error
    err.raise_mysql_exception(self._data)
  File "......\pymysql\err.py", line 120, in raise_mysql_exception
    _check_mysql_exception(errinfo)
  File "......\pymysql\err.py", line 115, in _check_mysql_exception
    raise InternalError(errno, errorvalue)
pymysql.err.InternalError: (1049, "Unknown database ‘XXXX‘")

但是通过navicat查看的话,代码中所用到的数据库以及表都是存在的。

二、正确的解决方案

最后我发现是自己电脑上的mysql版本冲突问题,由于自己之前安装mysql的时候安装了两次不同版本的,第一次安装的没有删除干净,所以出现了问题,解决步骤如下:

1.在能连上的那个数据库,查询版本;

#!/usr/bin/python3
 
import pymysql
 
# 打开数据库连接
db = pymysql.connect("localhost","testuser","test123","TESTDB" )
 
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
 
# 使用 execute()  方法执行 SQL 查询 
cursor.execute("SELECT VERSION()")
 
# 使用 fetchone() 方法获取单条数据.
data = cursor.fetchone()
 
print ("Database version : %s " % data)
 
# 关闭数据库连接
db.close()

2.查询自己navicat查看所用的数据库版本;

3.两个数据库不一致,打开服务,终止运行中的自己并没有用到的那个MySQL版本;

技术图片

4.问题解决

三、解决问题过程中遇到的其他知识

1.lock锁

使用了多线程,如果所有线程共享同一连接,每个execute之前请加上互斥锁
        lock.acquire()
        cursor.execute(command,data)     
        lock.release()
几种解决方案: 
       1. 每个线程拥有自己的连接 
       2. 所有线程共用一个连接,加锁互斥使用此连接 
       3. 所有线程共用一个连接池,需要考虑线程总数和连接池连接数上限的问题

来源:https://bbs.csdn.net/topics/392264802?page=1

2.报错:ModuleNotFoundError: No module named ‘fcntl‘

新建fncl.py文件(用记事本也行),输入以下代码并保存至Python安装目录的Lib目录下

def fcntl(fd, op, arg=0):
    return 0
 
def ioctl(fd, op, arg=0, mutable_flag=True):
    if mutable_flag:
        return 0
    else:
        return ""
 
def flock(fd, op):
    return
 
def lockf(fd, operation, length=0, start=0, whence=0):
    return

来源:https://blog.csdn.net/Myisking/article/details/82320744

3.查看python安装位置以及已经安装的库

cmd——>where python

来源:https://www.cnblogs.com/ExMan/p/9370631.html

 

python连接mysql数据库——版本问题

标签:lib   ISE   遇到   mys   ioctl   connect   skin   rri   htm   

原文地址:https://www.cnblogs.com/Qi77/p/12496822.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!