python连接MySQL数据库问题? cursor( ) 、execute()和fetc

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python连接MySQL数据库问题? cursor( ) 、execute()和fetc相关的知识,希望对你有一定的参考价值。

参考技术A mysqldb.connect是python 连接MySQL数据库的方法,在Python中 import MySQLdb即可使用,至于connect中的参数很简单:\\x0d\\x0ahost:MySQL服务器名\\x0d\\x0auser:数据库使用者\\x0d\\x0apassword:用户登录密码\\x0d\\x0adb:操作的数据库名\\x0d\\x0acharset:使用的字符集(一般是gb2312)\\x0d\\x0acursor = db.cursor() 其实就是用来获得python执行Mysql命令的方法,也就是\\x0d\\x0a我们所说的操作游标\\x0d\\x0a下面cursor.execute则是真正执行MySQL语句,即查询TABLE_PARAMS表的数据。\\x0d\\x0a至于fetchall()则是接收全部的返回结果行 row就是在python中定义的一个变量,用来接收返回结果行的每行数据。同样后面的r也是一个变量,用来接收row中的每个字符,如果写成C的形式就更好理解了\\x0d\\x0afor(string row = \'\'; row<= cursor.fetchall(): row++)\\x0d\\x0a for(char r = \'\'; r<= row; r++)\\x0d\\x0aprintf("%c", r);\\x0d\\x0a大致就是这么个意思!

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

 

以上是关于python连接MySQL数据库问题? cursor( ) 、execute()和fetc的主要内容,如果未能解决你的问题,请参考以下文章

Python操作MySQL实战案例讲解

mysql与python的交互

Python学习之MySQLdb模块

python 操作 MySQL 即相关问题

MySQLdb使用

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