Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

pymysql 报 1366错误 #108

Closed
jiazone opened this issue Jul 17, 2018 · 12 comments
Closed

pymysql 报 1366错误 #108

jiazone opened this issue Jul 17, 2018 · 12 comments

Comments

@jiazone
Copy link

jiazone commented Jul 17, 2018

我按照项目文档的教程,一步步进行,到 python create_all.py 和 login_frist.py 这两步都报这个错。

C:\Anaconda3\lib\site-packages\pymysql\cursors.py:165: Warning: (1366, "Incorrect string value: '\xD6\xD0\xB9\xFA\xB1\xEA...' for column 'VARIABLE_VALUE' at row 475")
result = self._query(query)
一开始运行到 create_all.py 这一步时,发现表格都已经建立,就不管了。直到第10步,还是这样的错误,就不得不解决了。mysql版本是5.7.1,按照项目环境配置,都设置为utf8mb4,每个表格字段也是此格式。
代码版本是1.7.2
希望能抽空看一下,看有没有什么解决的办法

@ResolveWang
Copy link
Member

1.mysql 客户端运行show variables like '%char%'看看

2.db/basic.pyget_engine()加一个utfbmb4

def get_engine():
    password = os.getenv('DB_PASS', db_pass)
    # 这里加utf8mb4
    connect_str = "{}+pymysql://{}:{}@{}:{}/{}?charset=utf8mb4".format(
        db_type, db_user, password, db_host, db_port, db_name)
    engine = create_engine(connect_str, encoding='utf-8')
    return engine

@jiazone
Copy link
Author

jiazone commented Jul 17, 2018

还是一样的报错,下图是mysql的截图:
image
另外,我的mysql是安装在windows环境下的,但是配置文件按照你这么配置了,会不会是因为这个原因?

@ResolveWang
Copy link
Member

不建议在win上部署,没做过测试,在win上不会也不打算维护

@jiazone
Copy link
Author

jiazone commented Jul 18, 2018

已经在centos7上重新安装mysql 5.7.22 ,但是在爬取数据完成,在把数据入库时候,还是报1366错误。
image
下图为 show variables like '%char%' 信息,已经将get_engine()修改成utf8mb4:
image

@ResolveWang
Copy link
Member

可能你需要将这个值打印一下,然后自己通过写SQL语句手动插入这行数据到数据库,看看是否能成功插入,能的话,那就是程序某个地方没做好,不能那就是你MYSQL配置的问题了。

另外,如果在抓取过程中,有极小部分数据出了错误,这个是没办法避免的。你需要多抓几个种子看看大部分数据是否都能抓取

@jiazone
Copy link
Author

jiazone commented Jul 18, 2018

手动执行SQL语句没有错误,那是代码那部分出问题呢?可以给一些一些建议吗?

@jiazone jiazone changed the title 运行create_all.py、login_frist.py 都报这个错 pymysql 报 1366错误 Jul 18, 2018
@ResolveWang
Copy link
Member

所有数据插入都报错吗?

可以试试dev_wpm这个分支,看看问题还在不。

@jiazone
Copy link
Author

jiazone commented Jul 18, 2018

是的,新增了uid进行爬取,还是报1366错误。我先试试这个分支

@jiazone
Copy link
Author

jiazone commented Jul 19, 2018

我重新部署了一台虚拟机,系统是CentOS 7.4,之前是7.5.Mysql 安装后,能正常执行create_all.py了,但是login_first.py 执行后没有结果,打印 tasks/login.py --> infos 信息,显示是 [],login_info 表是有数据的,不管是用可视化工具查看还是用mysql-cli,都显示有账号、密码。请问是什么原因呢

@ResolveWang
Copy link
Member

使用sqlalchemy的调试模式看看,在db/get_engine()那里修改

engine = create_engine(connect_str, echo=True)

把它的SQL拿去执行一下,看看是否有问题

还有,看看你的login表中的enable字段是0还是1

@jiazone
Copy link
Author

jiazone commented Jul 20, 2018

将login表的enable字段改成 1 才可以打印打印获取到,但是 seed_ids 表又没有数据,也不显示抓没有抓到结果。

@jiazone
Copy link
Author

jiazone commented Jul 20, 2018

问题解决了,是因为数据库密码存在特殊符号“...”,修改密码后可以正常运行。

@jiazone jiazone closed this as completed Jul 20, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants