Mysql报错红温集锦(一)(ipynb配置、pymysql登录、密码带@、to_sql如何加速、触发器SIGNAL阻止插入数据)

news2024/11/19 18:32:16

一、jupyter notebook无法使用%sql来添加sql代码

可能原因:

1、没装jupyter和notebook库、没装ipython-sql库

pip install jupyter notebook ipython-sql

另外如果是vscode的话还需要安装一些相关的插件

2、没load_ext

%load_ext sql

3、没正确的登录到mysql用户上

通过notebook添加mysql代码需要登陆对应的mysql用户和数据库

否则就会遇到$DATABASE_URL not set这种报错

sql.connection.ConnectionError: Environment variable $DATABASE_URL not set, and no connect string given.

怎么登录?格式如下

%sql mysql://A:B@C:D/E

A:用户名、B:密码

C:数据库服务器的IP地址,如果是连接本机就写 localhost

D:端口号,mysql默认的是3306,如果你改了设置就按你改的来

E:数据库名,例如经典的sakila

想看更细致的配置请看这篇文章,非常详细

如何在Jupyter Notebook里运行SQL? - 知乎 (zhihu.com)

二、最逆天的一集:密码带@怎么登录

典型报错是:

socket.gaierror: [Errno 11003] getaddrinfo failed

Connection info needed in SQLAlchemy format

也就是host获取的名字错误+格式问题

想一下,我们登录的格式是这样%sql mysql://A:B@C:D/E

密码B如果是 “abc@def” 就会导致def被认为是后面C的一部分,然后C就变成了 “def@C”,所以是socket的地址解析发生错误。

如果是普通的使用pymysql登录那没问题,因为密码是被独立出来了的

import pymysql
import sqlalchemy
# 数据库配置
config = {
    'host': 'localhost',
    'user': 'root',
    'password': 'abc@123',
    'database': 'sakila',
    'charset': 'utf8mb4',
    'cursorclass': pymysql.cursors.DictCursor
}
 
# 连接数据库
connection = pymysql.connect(**config)
cursor = connection.cursor()

但如果是一句话直接输入就会变成这样

%sql mysql://root:abc@123@localhost:3306/sakila

网上找了很多资料,没找到解决登录ipython-sql且密码带@的方法

偶然发现这个解析是可以使用URL编码的

在线编码转换工具(utf-8/utf-32/Punycode/Base64) - 编码转换工具 - W3Cschool

@就是%40,:就是%3A

除去@和:这些特殊符号,其他的符号应该都不会影响登录解析

所以改成把abc@123改成abc%40123就可以了

%sql mysql://root:abc%40123@localhost:3306/sakila

另外一种解决方式就是新建一个user,授予他所有权限,让它的密码不带这些特殊符号,然后用它来登录。

三、to_sql怎么加速

Pandas to_sql详解-CSDN博客

这篇博客非常详细介绍了to_sql各个参数的含义

根据网上大佬的言论,在python中一条一条插入数据主要就是慢在反复连接数据库上

如果一次能够插入多个数据,就会很快了

根据这篇博客:pandas to_sql写入数据很慢_pandas,to_sql很慢,出现超时-CSDN博客

加入dtype之后就快了很多

import pandas as pd
from sqlalchemy import create_engine
from sqlalchemy.types import Integer
dfSTC=pd.DataFrame(TmpSTC,columns=['sno','tno','cno'])
print(dfSTC)

connection_string = 'mysql://csq:csq@localhost:3306/xxx'
engine = create_engine(connection_string)
# dfSTC.to_sql('STC',con=engine,if_exists='append',index=False)
dfSTC.to_sql('STC',con=engine,if_exists='append',index=False,chunksize=10000,dtype={'sno':Integer(),'tno':Integer(),'cno':Integer()})

但是在这之后,即便删掉dtype,也是一样的快,这让我很疑惑,无法复现慢速的to_sql了

下图,插入98万的数据只用了20s

select一下,发现确实也插入进去了

有说法说sql插入的时候如果不规定dtype他会一直去推断类型,然后选择最大的类型,这会花很多时间,感觉也有道理。

而且我调整了一下chunksize,似乎并没有太大的影响,都是20s左右。

这个问题最后就不了了之了。

四、使用触发器阻止某条数据的插入与to_sql冲突了

在before insert的触发器里面写,当插入数据不满足某个条件时,直接使用mysql的SIGNAL语句raise一个报错出来,这样就会中断后续的插入事务

SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'ASDF';

但是如果想使用to_sql同时又加入这个类型的触发器,就会导致更加严重的问题

to_sql相当于一个批量插入的操作(?这点不确定)

如果在中途raise一个SIGNAL出来,就会导致整个insert的事务的中断,产生如下报错

OperationalError: (pymysql.err.OperationalError) (1644, 'ASDF')

会发现这里的Error正是我们触发器中Raise的SIGNAL

所以,如果触发器中包含中断事务的话,最好不要和to_sql一类的函数使用(?

也就是这个问题现在还没法解决。。

但是

或许这只是问题的表面呢?

或许有更优秀的解决方法呢?

希望各路大神能够支支招解决这个问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1642122.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Hibernate入门学习

目录 1、ORM思想概述 2、自定义ORM框架 3、第一个Hibernate程序开发步骤(重要) 1)下载完整包 2)创建项目,导入所需jar包 3)建立student表 4)创建和student表对应的Student实体类 5&…

Sarcasm detection论文解析 |A2Text-Net:一种用于讽刺检测的新型深度神经网络

论文地址 论文地址:A2Text-Net: A Novel Deep Neural Network for Sarcasm Detection | IEEE Conference Publication | IEEE Xplore github:lliyuan1117/A2Text-Net (github.com) 论文首页 A2Text-Net:一种用于讽刺检测的新型深度神经网络 &#x1f4c5…

Gradle 进阶学习 之 build.gradle 文件

build.gradle 是什么? 想象一下,你有一个大型的乐高项目,你需要一个清单来列出所有的乐高积木和它们如何组合在一起。在软件开发中,build.gradle 就是这个清单,它告诉计算机如何构建(组合)你的软…

阿里低代码引擎学习记录

官网 一、关于设计器 1、从设计器入手进行低代码开发 设计器就是我们用拖拉拽的方法,配合少量代码进行页面或者应用开发的在线工具。 阿里官方提供了以下八个不同类型的设计器Demo: 综合场景Demo(各项能力相对完整,使用Fusion…

掌握JavaScript面向对象编程核心密码:深入解析JavaScript面向对象机制对象概念、原型模式与继承策略全面指南,高效创建高质量、可维护代码

ECMAScript(简称ES,是JavaScript的标准规范)支持面向对象编程,通过构造函数模拟类,原型链实现继承,以及ES6引入的class语法糖简化面向对象开发。对象可通过构造函数创建,使用原型链共享方法和属…

16、ESP32 Web

Web 服务器具有移动响应能力,可以使用本地网络上的任何设备作为浏览器进行访问。 示例功能: 构建 Web 服务器控制连接到 ESP32 的 LED在本地网络的浏览器上输入 ESP32 IP 地址访问 Web 服务器通过单击 Web 服务器上的按钮,更改 LED 状态 //…

C#语言基础

一、复杂数据类型 1. 枚举 1.1 基本概念 1.1.1 枚举是什么 枚举是一个被命名的整型常量的集合,一般用它来表示状态、类型等等 1.1.2 申明枚举和申明枚举变量 申明枚举和申明枚举变量是两个概念 申明枚举:相当于是创建一个自定义的枚举类型 申明枚…

C#实战—代码实现收发文件智能化

在信息化的今天,收发电子文档几乎是每个朋友都要经历的事情。比如班级学委和班长需要收发作业,企业管理者需要收发工作文件。但是!!! 每到要交结果时,往往会发现总会有一些人没有即使交上,50个…

【Leetcode每日一题】 综合练习 - 全排列 II(难度⭐⭐)(71)

1. 题目解析 题目链接:47. 全排列 II 这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。 2.算法原理 算法思路梳理 为了生成给定数组nums的全排列,同时避免由于重复元素导致的重复排列,我们可以遵…

面试中算法(2的整数次幂)

判断一个正整数是否是2的整数次幂(如16是2的4次方,返回true;18不是2的整数次幂,则返回false),要求性能尽可能高。 使用一个整型变量,让它从1开始不断乘以2,将每一次乘2的结果和 目标整数进行比较…

【python的魅力】:教你如何用几行代码实现文本语音识别

文章目录 引言一、运行效果二、文本转换为语音2.1 使用pyttsx32.2 使用SAPI实现文本转换语音2.3 使用 SpeechLib实现文本转换语音 三、语音转换为文本3.1 使用 PocketSphinx实现语音转换文本 引言 语音识别技术,也被称为自动语音识别,目标是以电脑自动将…

【网站项目】社区互助平台

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

Object Desktop - Stardock 软件开发商系列套件

Windows 的一大优势在于可高度自定义,能让我们把它打造成一个最符合自己需求的工作和娱乐工具。 在桌面增强工具套件 Object Desktop 中,包含了 Stardock 旗下 10 款生产力和美化工具,可帮助我们打造出美观、实用、高效的 Windows 系统。 St…

Leetcode—163. 缺失的区间【简单】Plus

2024每日刷题&#xff08;126&#xff09; Leetcode—163. 缺失的区间 实现代码 class Solution { public:vector<vector<int>> findMissingRanges(vector<int>& nums, int lower, int upper) {int n nums.size();vector<vector<int>> an…

文件(夹)批量重命名数字、字母、日期、中文数字大写小写

首先&#xff0c;需要用到的这个工具&#xff1a; 度娘网盘 提取码&#xff1a;qwu2 蓝奏云 提取码&#xff1a;2r1z 目标是重命名下面5个文件&#xff08;也可以是文件夹等&#xff0c;任意&#xff09;&#xff0c;从大写中文数字“贰”开始 打开工具&#xff0c;找到“文…

SNR: Signal to Noise Ratio

https://www.xx.com/watch?vmyrZ_R6xIZA Fang, Y., Armin, A., Meredith, P. et al. Accurate characterization of next-generation thin-film photodetectors. Nature Photon 13, 1–4 (2019). https://doi.org/10.1038/s41566-018-0288-z Wang, F., Zhang, T., Xie, R. e…

[XYCTF新生赛]-PWN:fmt解析(scanf格式化字符串漏洞,任意地址写)

查看保护 查看ida 这里没什么好说的 完整exp&#xff1a; from pwn import* context(log_leveldebug) #pprocess(./fmt) premote(gz.imxbt.cn,20975) backdoor0x4012BEp.recvuntil(bgift: ) printf_addrint(p.recv(14),16) print(hex(printf_addr)) libcELF(./libc-2.31.so) …

【计算机网络】循环冗余校验:Cyclic Redundancy Check

1. 任务目标 利用循环冗余校验&#xff08;CRC&#xff09;检测错误。 循环冗余校验&#xff08;英语&#xff1a;Cyclic redundancy check&#xff0c;通称 CRC&#xff09;是一种根据网上数据包或计算机文件等数据产生简短固定位数校验码的一种散列函数&#xff0c;主要用来…

消息队列与信号量(基本概念及操作接口介绍)

一、消息队列 基本概念 System V消息队列是Unix系统中一种进程间通信&#xff08;IPC&#xff09;机制&#xff0c;它允许进程互相发送和接收数据块&#xff08;消息&#xff09; 操作系统可以在内部申请一个消息队列&#xff0c;可以让不同的进程向消息队列中发送数据块&…