Mysql数据库'Got a packet bigger than‘max_allowed_packet’bytes'的解决方案
采集数据时,总有几条入不了库。尝试手动入库的时候,发生了报错。
运行环境 Runtime environment12345操作系统: Windos10 IDE: webStrom 2021.3.1 x64 语言: nodeJs v14.15.4框架: hexo "5.3.0"theme: [Butterfly "3.6.1"]
症状从网上将数据复制下来,用Navicat填写进相应字段中,按保存发生了错误。
1Got a packet bigger than‘max_allowed_packet’bytes
问题原因该字段存储的是站源的原生接口json数据。
字段类型为json类型,长度应该是足够的,但是也存不进去。
发现是由于max_allowed_packet的值设置过小的原因,
只需要将max_allowed_packet值设置大一点就OK了。
解决办法通过终端进入mysql控制台,输入如下命令可以查看max_allowed_packet值的大小。
show VARIABLES like ‘%max_allowed_pac ...
通过python一键生成mysql建表sql语句!
这一个多月,一直在做数据采集,写程序,然后创建好几个表一个个填字段,我吐了。
于是开发了一个懒人工具。
运行环境 Runtime environment12345操作系统: Windos10 navicat: 15.0.2 mysql: 5.7.31IDE: Pycharm 2021.3.2 x64 语言: Python 3.9.1
背景这一个多月,一直在做数据采集。
开发程序,然后为每个创建好几个表,
并且一个个填字段,excel|Pycharm|Navicat 三个窗口切着换,眼睛都看疼了。
于是开发了一个懒人工具,
通过python的字典,直接生成可供Navicat(别的能够执行sql语句的工具也可以,只是我没测试过)使用的建表sql语句,简称DDL。
应用场景假如爬虫采集一条数据,并进行清洗生产了一个变量名为item的字典
1234567891011121314151617itemDict = { 'chembl_id': 'cXXXl_XXXX_target', 'chembl_targe ...
Navicat 看历史执行SQL
navicat 有些危险操作是没有二次确认的,实施误操作以后如何追述问题,就需要查询历史记录。
运行环境 Runtime environment123操作系统: Windos10 navicat: 15.0.2 mysql: 5.7.31
背景Navicat 有些危险操作是没有二次确认的,实施误操作以后如何追述问题,就需要查询历史记录。
Navicat 新建查询写好的sql语句,如果窗口关闭,查询里面的sql语句就会清空(不专门保存文件的话),就需要查询历史记录。
Navicat 查看操作历史按图打开历史记录,或者快捷键 ctr+l
翻看历史,查找自己需要的信息,或输入搜索查找相关信息
MYSQL数据库Specified key was too long; max key length is xxx bytes,解决方案
给MySql数据库表Varchar类型字段加索引时报错:“Specified key was too long; max key length is xxx bytes”;
运行环境 Runtime environment123操作系统: Windos10 navicat: 15.0.2 mysql: 5.7.31
症状scrapy 爬虫采集入库的时候,管道打印了报错日志。
给MySql数据库表Varchar类型字段加索引时报错:“Specified key was too long; max key length is xxx bytes”;
1“Specified key was too long; max key length is xxx bytes”;
问题原因采集的时候入库的有关字段是用来存储url链接的,但是采集的数据,惊人的给我返回了3742字节长度的一条url链接。
这样的长度,确实不是年幼的varchar类型所能承受的(?)。
应该使用更能适应场景text类型,来存储url。
解决办法修改字段长度,注意编码格式,例如你的字段长度为100(指的是字符数) ...
Mysql设置自动更新时间&创建时间
scrapy item是可以不包含mysql自生成字段的。用sql自带的时间创建,可以省很多事,在数据更新判断上也交由数据库自己来判断。
运行环境 Runtime environment123操作系统: Windos10 navicat: 15.0.2 mysql: 5.7.31
背景scrapy item是可以不包含mysql自生成字段的。
用sql自带的时间创建,可以省很多事,在数据更新判断上也交由数据库自己来判断。
采集数据的时候,设置创建时间和更新时间,可更方便的定位数据的生产信息。
需求描述假设建表包括如下字段:
123id:自增主键IDcreate_time: 创建时间update_time: 修改时间
需求:
如何创建table可以使得,
在插入记录时create_time、update_time默认为当前时间;
在修改记录时update_time自动更新为当前时间?
sql 建表法sql建表语句:
123456CREATE TABLE `time_test` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREME ...
mysql中ERROR 1364 (HY000): Field 'xxxx' doesn't have a default value的解决方案
开发了一个自动生成建表语句的python小程序,用生成好的数据表插入数据,发现了问题。
运行环境 Runtime environment123操作系统: Windos10 navicat: 15.0.2 mysql: 5.7.31
症状scrapy 爬虫采集入库的时候,管道打印了报错日志。
1ERROR 1364 (HY000): Field 'chembl_id' doesn't have a default value
问题原因建表的sql语句中,chembl_id字段设置NOT NULL,不能为空,也没赋予默认值。
导致的报错!
123456789101112131415161718192021CREATE TABLE `!!!!此处填写表名!!!!` ( `id` int(25) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增id(仅作计数使用不可作为关联依据!)', `chembl_id` varchar(648) NOT NULL COMMENT 'che ...
MySQL Charset--UTF8和UTF8MB4的区别
某日,数据库建表的时候,我开始好奇mysql的charset编码设置参数。uft8和utf8mb4有啥区别呢?
运行环境 Runtime environment123操作系统: Windos10 navicat: 15.0.2 mysql: 5.7.31
背景某日,数据库建表的时候,我开始好奇mysql的charset编码设置参数。
uft8和utf8mb4有啥区别,谁更有优势呢?
UTF8和UTF8MB4在早期MySQL版本中,使用只支持最长三字节的UTF8字符集便可以存放所有Unicode字符。
随着Unicode的完善,Unicode字符集收录的字符数量越来越多,最新版本的UTF8需要使用1到4个字节来存放Unicode字符,而MySQL为保持版本兼容,
依旧使用最多3字节的UTF8字符集,并在MySQL 5.5.3版本引入UTF8MB4字符集来支持4字节的Unicode字符。
测试案例汉字 ‘𤋮’ 和 ‘ 𤋮 ‘ 是异体字,读音均为xi,但两个字的unicode不同:
123456𤋮 对应的UNICODE是 \ud850\udeee; 𤋮 对应的UTF8是 ...
Python如何判断文件是否存在?
Python如何判断文件是否存在?
运行环境 Runtime environment123操作系统: Windos10 IDE: pycharm 2021.3.1 x64 语言: python v3.9.1
背景平时在读写文件之前,需要判断文件或目录是否存在,不然在某些情况下,可能会使程序发生错误。
所以最好在做任何操作之前,先判断文件是否存在。
按照使用频率,排个序大概有以下几种方式。
os模块os模块中的 os.path.exists() 方法用于检验文件或者文件夹是否存在。
判断文件是否存在1234567import osos.path.exists("README.md")# 输出 True# 放入根本不存在的文件名时os.path.exists("README_XXXXX.md")# 输出 False
判断文件夹是否存在1234567import osos.path.exists("test_dir")#True# 放入根本不存在的文件夹名称os.path.exists("None_dir&q ...
scrapy全局setting各项配置的说明
scrapy全局setting各项配置的说明
运行环境 Runtime environment1234操作系统: Windos10 IDE: pycharm 2021.3.1 x64 语言: python v3.9.1框架: Scrapy
AUTOTHROTTLE_START_DELAYAUTOTHROTTLE_START_DELAY = 3
开始下载时限速并延迟时间
AUTOTHROTTLE_MAX_DELAYAUTOTHROTTLE_MAX_DELAY = 60
高并发请求时最大延迟时间
AWS_ACCESS_KEY_IDAWS_ACCESS_KEY_ID
它是用于访问亚马逊网络服务。
默认值:无
AWS_SECRET_ACCESS_KEYAWS_SECRET_ACCESS_KEY
它是用于访问亚马逊网络服务。
BOT_NAMEBOT_NAME
它是一种可以用于构建用户代理机器人的名称。
默认值:“scrapybot”
eg:BOT_NAME=“scrapybot”
CONCURRENT_ITEMSCONCURRENT_ITEMS
在用来并行 ...
python中如何判断sql语句操作成功?
python中如何判断sql语句操作成功?
运行环境 Runtime environment1234操作系统: Windos10 IDE: pycharm 2021.3.1 x64 语言: python v3.9.1模块: Pymysql
背景老话说,石头丢到水里,怎么说也能听个响声。
这其实就是一种交互以后得到反馈的过程。
那么,python是用mysql数据库入库以后,我要如何得知自己的入库情况呢?
思路mysql 无论是 插入数据 或者 更新插入 或者 替换插入 等方式,它们最终都会影响到数据的变动,而mysql会反馈发生数据变动的行数。
插入数据
通常只有一行数据发生了变化,返回一般是 1 行
更新插入&替换插入
一般返回的是 2 行,即删除1行,添加1行的操作
但是碰到数据实际上无变化那就无需更新,mysql就会略过插入操作,返回的行数变动数量就会是 0
代码部分代码如下(pymysql如何链接数据库总不用写了吧..):
12345678910111213141516171819# ...# import pymysql# conn = ...