conn = pymsql.connect('localhost', 'wang', '123456', 'jingdong', 'utf8')
# 创建游标
cur = conn.cursor()
# 执行查询语句
cur.execute('select * from jingdong;')
执行之后报错
pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on 'localhost' ([Errno 10109] getaddrinfo failed)")
分析报错内容是在提示我无法连接上MySQL服务器,行,就是说我MySQL服务没开启咯。进到服务里面查看了,MySQL服务的启动情况,是正常开启状态的。其实吧,我也觉得不应该是MySQL服务的问题,因为我客户端现在是可以正常链接MySQL的
网上Google了一番也没有找到任何有价值的资料,所有搜索的词条都是再说你去开启你的MySQL服务。。。。(垃圾信息真多
不知道从哪儿排查,就试着看下源码吧,是不是参数写错了?这一看还真就发现问题所在,下面我贴出来源码中的初始化方法内容
def __init__(self, host=None, user=None, password="",
database=None, port=0, unix_socket=None,
charset='', sql_mode=None,
read_default_file=None, conv=None, use_unicode=None,
client_flag=0, cursorclass=Cursor, init_command=None,
connect_timeout=10, ssl=None, read_default_group=None,
compress=None, named_pipe=None,
autocommit=False, db=None, passwd=None, local_infile=False,
max_allowed_packet=16*1024*1024, defer_connect=False,
auth_plugin_map=None, read_timeout=None, write_timeout=None,
bind_address=None, binary_prefix=False, program_name=None,
server_public_key=None):
其中参数部分非常明确的告诉了我需要传入一个端口号,否则按照0来处理,好吧,那我就按照顺序重新修改了一遍代码
import pymysql
conn = pymysql.connect('127.0.0.1', 'wang', '123456', 'jingdong', 3306, 'utf8')
cursor = conn.cursor()
print(cursor.execute("select * from goods;"))
这次总应该没错了吧,执行之后,的确是没有2003的报错code了,但是来了个新的
AttributeError: module 'socket' has no attribute 'AF_UNIX'
行吧!!!接着看源码,才发现其实是我上面的入参方式有问题,我是按照位置传参的,所以我的编码格式‘utf-8’会被分配给了 参数‘unix_socket’。。。。重新修一下,添加上参数名,不再使用位置传参
import pymysql
conn = pymysql.connect(host='127.0.0.1', user='wang', password='123456', database='jingdong', port=3306, charset='utf8')
cursor = conn.cursor()
print(cursor.execute("select * from goods;"))
结果又开始报另一个错误了T_T
RuntimeError: cryptography is required for sha256_password or caching_sha2_password
继续分析报错,实在提示我啥啥啥密码是需要一个cryptography,这是个什么鬼东西?
原来是一个跟密码相关的模块,好像是MySQL8.0才会需要。。。。(我为什么要把数据库更新到8T_T
python安装这个模块,这里又有个小插曲,pip命令在线安装报错!!!(此处是吐槽功夫墙)最后是下载了离线包,离线安装成功
bingo!!!代码顺利执行,结果完美显示
在使用pymsql链接mysql8.0的时候编辑好如下代码import pymsql# 创建链接对象conn = pymsql.connect('localhost', 'wang', '123456', 'jingdong', 'utf8')# 创建游标cur = conn.cursor()# 执行查询语句cur.execute('select * from jingdo...
解决
:
pymysql
.
err
.
Operation
al
Error
: (
2003
, "Can't
connect
to
MySQL
server
on xxxx
在网上找了资料,看有的说是
MySQL
没有打开,有的说是一些权限问题,这个问题困扰了我一天,最终我发现,我原来的测试代码这样写,简明来讲是我的代码出错了,不是
MySQL
的问题。我在写测试代码的时候 ,
connect
() 里面的内容写的有问题。
错误代码:
db =
pymysql
.
connect
(host='loc
al
host',user='root', password='lvjunyu1230', port=3306)
将loc
al
host改为:
db =
pymysql
.
connect
(host='127.0.0.1',user='root', password='lvjunyu1230', port=3306)
1、
mysql
默认只能从本机登录,需要在
mysql
的
数据库
表中改变指定用户可以从别的机器上登录:
用root身份进入
mysql
输入以下命令:以允许abc用户可以从别的机器上登录为例。
use
mysql
;
update user set host = '%' where user = 'abc';
FLUSH PRIVILEGES;
2、让
mysql
不再只绑
本文实例讲述了
Py
thon提示[
Err
no 32]Broken pipe导致线程crash错误
解决
方法。分享给大家供大家参考。具体方法如下:
1. 错误现象
ThreadingHTTP
Server
实现的 http 服务,如果客户端在服务器返回前,主动断开连接,则服务器端会报 [
Err
no 32] Broken pipe 错,并导致处理线程 crash.
下面先看个例子,
py
thon 版本: 2.7
复制代码 代码如下:#!/usr/bin/env
py
thon
#!coding=utf-8
import os
import time
import socket
import
一、下载VSCode
点击下方
链接
,进入官网下载,ubuntu一定要下载文件后缀为.deb的文件
https://code.visu
al
studio.com/Download
二、安装VSCode
第一种情况:比较顺利,直接安装成功
下载成功后点击.deb文件直接安装
点击inst
al
l,输入密码
在菜单里找到vscode即可
第二种情况:直接安装失败
点击inst
al
l之后无反应(即没有上面的密码输入,菜单里也找不到VSCode)
找到安装包所在的位置,右键在此打开终端(.deb所在路径和终端
解决
:
pymysql
.
err
.
Operation
al
Error
: (
2003
, "Can’t
connect
to
MySQL
server
on ‘127.0.0.1’)
在网上寻找了许久的
解决
办法,一直没有
解决
问题,直到灵光一闪……
在
MySQL
和
pymysql
已经安装好的情况下, 在
py
charm上 使用
pymysql
进行连接
数据库
操作时,运行代码如下
#导包
py
masql
import
pymysql
#获取连接对象
conn =
pymysql
.
connect
("127.0.0.1",
# 连接
数据库
conn =
pymysql
.
connect
(host='loc
al
host', port=3306, user='root', password='password', db='database_name', charset='utf8mb4')
# 获取游标
cursor = conn.cursor()
# 执行 SQL 语句
sql = "INSERT INTO table_name (column1, column2, column3) V
AL
UES (%s, %s, %s)"
data = [('v
al
ue1', 'v
al
ue2', 'v
al
ue3'), ('v
al
ue4', 'v
al
ue5', 'v
al
ue6'), ('v
al
ue7', 'v
al
ue8', 'v
al
ue9')]
cursor.executemany(sql, data)
# 提交事务
conn.commit()
# 关闭游标和连接
cursor.close()
conn.close()
其中,`host`、`port`、`user`、`password`、`db` 分别为
数据库
的主机名、端口号、用户名、密码和
数据库
名,`charset` 为字符集。`table_name` 和 `column1`、`column2`、`column3` 分别为表名和表的列名,`v
al
ue1`、`v
al
ue2`、`v
al
ue3`、`v
al
ue4`、`v
al
ue5`、`v
al
ue6`、`v
al
ue7`、`v
al
ue8`、`v
al
ue9` 分别为要插入的数据。`executemany` 方法可以一次性插入多条数据,可以根据需要修改。