python3.6.5 始终连接不上mysql8.0

python3.6.5 始终连接不上mysql8.0,第1张

# createdatabase.py

#!/usr/bin/env python

import os

import re

import sys

import pymysql

from importlib import import_module

# search the dirname of settings.py and import it

with open('manage.py') as f:

    s = f.read()

d = re.search(r'DJANGO_SETTINGS_MODULE.*?,\s*"(.+?)\.settings', s).group(1)

assert 'settings.py' in os.listdir(d)

mo = import_module('{d}.localsettings'.format(d=d))

def getconf(alias='default'):

    dbconf = mo.DATABASES.get(alias)

    config = {'host': dbconf.get('HOST'),

              'user': dbconf.get('USER'),

              'passwd': dbconf.get('PASSWORD'),

              'port': dbconf.get('PORT'),

              'charset': 'utf8', }

    config = {k: v for k, v in config.items() if v is not None}

    db_name = dbconf.get('NAME')

    return config, db_name

def creat_db(config, db_name):

    try:

        conn = pymysql.connect(**config)

        cur = conn.cursor()

        if '-d' in sys.argv:

            cur.execute('drop database {}'.format(db_name))

            print('success to execute `drop database {}`'.format(db_name))

        command = 'create database {} DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci'.format(db_name)

        cur.execute(command)

        print('success to execute `{}`'.format(command))

        # conn.select_db(database)

        conn.commit()

        cur.close()

        conn.close()

    except Exception as e:

        print("SQL Error: {e}".format(e=e))

def main():

    creat_db(*getconf())

    # creat_db(*getconf('mysql_property'))

估计是密码错了,你直接在命令行运行:

mysql -u root -p root

看看密码是不是root

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 回答于 2022-11-16

在 Python 语言环境下我们这样连接数据库。

In [1]: from mysql import connector

In [2]: cnx = connector.connect(host="172.16.192.100",port=3306,user="appuser",password="xxxxxx")

但是连接数据库的背后发生了什么呢?

答案

当我们通过驱动程序(mysql-connector-python,pymysql)连接 MySQL 服务端的时候,就是把连接参数传递给驱动程序,驱动程序再根据参数会发起到 MySQL 服务端的 TCP 连接。当 TCP 连接建立之后驱动程序与服务端之间会按特定的格式和次序交换数据包,数据包的格式和发送次序由 MySQL 协议 规定。MySQL 协议:https://dev.mysql.com/doc/internals/en/client-server-protocol.html整个连接的过程中 MySQL 服务端与驱动程序之间,按如下的次序发送了这些包。

MySQL 服务端向客户端发送一个握手包,包里记录了 MySQL-Server 的版本,默认的授权插件,密码盐值(auth-data)。

2. MySQL 客户端发出 ssl 连接请求包(如果有必要的话)。

3. MySQL 客户端发出握手包的响应包,这个包时记录了用户名,密码加密后的串,客户端属性,等等其它信息。

4. MySQL 服务端发出响应包,这个包里记录了登录是否成功,如果没有成功也会给出错误信息。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10829809.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-11
下一篇 2023-05-11

发表评论

登录后才能评论

评论列表(0条)

保存