python連接mysql數據庫——版本問題


今天終於解決了使用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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM