出生日期范围的Sql语句_【呕心总结】python如何与mysql实现交互及常用sql语句

9 月初,我对 python 爬虫 燃起兴趣,但爬取到的数据多通道实时同步读写用文件并不方便,于是开始用起mysql。这篇笔记,我将整理近一个月的实战中最常用到的 mysql 语句,同时也将涉及到如何在python3中与 mysql 实现数据交换。

关于工具/库,特别说明下:

1、我安装了 mysql ,并直接采用管理员身份运行命令行提示符(cmd)查看 mysql,并没有安装任何 mysql 的可视化图形界面工具。

2、在 python 脚本中,我采用 pymysqlsqlalchemy 这两个库与 mysql 建立连接,用 pandas 来处理数据。

一、建立连接与数据交互

与 mysql 交互的方式,我目前共使用 4 种。其中采用管理员身份运行命令行提示符(cmd)查看 mysql,其操作图示可另写一篇。这里就不占篇幅了。mysql的可视化图形界面工具,我目前并没有用到,也没有迫切使用它的需要。另外 3 种方式都是通过 python 脚本进行。

情境A:python 演算得出数据,想要写入数据库

python 脚本已得到表格类大量数据,想要一次性写入数据库,常用代码如下:

import pandas as pd
# 与 mysql 建立连接
from sqlalchemy import create_engine
conn_eng = create_engine('mysql+pymysql://username:password@localhost:3306/databasename',encoding='utf8')  # 调用 pandas 的方法,数据写入mysql
pd.io.sql.to_sql(your_df, "table_name", conn_eng, if_exists='append',index=False)

表格类数据,我用的是 pandasdataframe 结构。pd.io.sql.to_sql() 的参数还有许多其它用途,但上面这种是我个人使用最高频的。效果是:无需自己提前建表,将自动建新表。美中不足是:表的列属性自动生成,通常不合心意,还需检查和修改。

如果不想用 pd.io.sql.to_sql() 或者想更精细、复杂的操作,则用到下面的情境C。

情境B:python 脚本想从 mysql 拿到数据

如果已经存在某个表格,想要向该表格提交某条指令,需返回数据,我用的是 pandasread_sql () ,返回的数据类型是 pandasdataframe。sql 查询语句挺好写的,具体总结在本文下方。

import pymysql
# 与 mysql 建立连接
conn = pymysql.connect('localhost','username','password','databasename')
# sql 语句定义为一个字符串
sql_search = 'select question_id from topic_monitor where is_title=0 ;'
# 调用 pandas 的 read_sql() 方法拿到 dataframe 结构的数据
question_ids = pd.read_sql(sql_search,conn)
# 关闭连接
conn.close()

情境C:python 脚本单方面向 mysql 发出指令,无需拿到数据

如果已经存在某个表格,想要向该表格提交某条指令而无需返回数据时,比如:建表、对数据的增改删、对列的名称、列的属性修改等,代码如下。

import pymysql
# 与 mysql 建立连接
conn = pymysql.connect('localhost','username','password','databasename')
cursor = conn.cursor()
# sql 语句定义为一个字符串,插入一行数据
sql_insert = 'INSERT INTO questions(q_id,q_title,q_description,q_keywords,q_people,q_pageview,time) VALUES( "'+ str(quesition_id) + '", "' + str(one[0])+ '", "' + str(one[1]) + '", "' + str(one[2]) + '", "' + str(one[3]) + '", "' + str(one[4]) + '", "' + str(datetime.datetime.now()) + '");' 
# sql 语句定义为一个字符串,修改某个数据(另一个表格)
sql_update = 'update topic_monitor SET is_title="1" where question_id = "' + str(quesition_id) + '";'
# 提交指令
cursor.execute(sql_insert)
cursor.execute(sql_update)
conn.commit()# 插入一行数据;仅当该数据与表格已有数据不重复时才插入,否则就不会插入
sql_insert = 'INSERT INTO `topic_monitor`(question_id,is_title,q_type,topic_id,time) SELECT "'+ x[0] + '", "0", "0","'  + str(topic_id) + '", "'+ str(now) + '" FROM DUAL WHERE NOT EXISTS(SELECT question_id FROM topic_monitor WHERE question_id = "' + x[0] + '")'
cursor.execute(sql_insert)
conn.commit()# 关闭连接
cursor.close()
conn.close()

通过上面几种实用情况可以看到,pythonmysql 实现交互的过程,通常分为:建立连接、把sql语句定义为字符串,提交指令、关闭连接。核心的技能在于 sql语句;除了定义sql语句字符串,其余3个处理都是固定的写法。

我在最初一个月的实践中,最常出现的错误有:

  • 值的引用没有加上引号;
  • 符号错乱:多一个符号,少一个符号;
  • 值的类型不符合:不管 mysql 表格中该值是数,还是文本,在定义 sql 语句的字符串时,对每个值都需要转化为字符串;
  • 拷贝自己的代码时,忘记修改databasename。

二、sql语句:搜索查询

搜索是指在数据库的某个表格中查询符合特定条件的数据,并返回查询结果。其基本结构为:

SELECT 【范围】FROM table_name 【条件】; 其中,范围是必须指定的,而条件可有可无。

变量A:范围,是指返回查询结果的范围。

返回该表格的所有字段,用 * 表达:

SELECT * FROM table_name ;

95856abb-b40e-eb11-8da9-e4434bdf6706.png

仅返回该表格的某个字段:

SELECT column_name FROM table_name ;

仅返回该表格的多个字段:

SELECT column_name_1,column_name_3,column_name_3 FROM table_name ;

96856abb-b40e-eb11-8da9-e4434bdf6706.png

仅返回符合条件的数据个数:

SELECT count(*) FROM table_name ;

97856abb-b40e-eb11-8da9-e4434bdf6706.png

变量B:条件是指,期望返回的数据满足哪些条件。

不限定条件:

SELECT * FROM table_name ;

数值类:某个字段(数值类型的,比如double或者int),数值比较的操作符都可以使用比如,大于>,小于<,等于 = ,大于等于 >= ,小于等于 <=

99856abb-b40e-eb11-8da9-e4434bdf6706.png
SELECT * FROM table_name WHERE num_column_name >= 1;

文本类:某个字段(字符串类型的,比如char,text):

SELECT * FROM table_name WHERE str_column_name like “%your_str%”;

9b856abb-b40e-eb11-8da9-e4434bdf6706.png

也可以表达多个条件,andor等可用于表达条件之间的关系:

SELECT * FROM table_name WHERE num_column_name_1 >= 1 and  str_column_name like “%your_str%” ;

9c856abb-b40e-eb11-8da9-e4434bdf6706.png

三、sql语句:修改表属性

横向的一整条数据,叫做行;竖向的一整条数据,叫作列。列的名字,叫做 column,这是通用的知识点。

这段时间的实战中,我完全没有用到修改表的名称、重设index等知识点。最常用的,就是对列进行操作。每个列具备:列的名称、列的属性、列的数值。

列的名称,需要留心不使用保留词。我的技巧是,尽量用一些_来表达该数据,比如 article_titlepress_date 这种命名虽然稍长,但易读,也不会装上保留词。

列的属性包括:类型,最大长度,是否为空,默认值,是否重复,是否为索引。通常,直接通过 pandaspd.io.sql.to_sql() 一次性创建表格并保存数据时,列的默认属性并不合需求。要么提前自己定义表的结构,设置好每列属性;要么事后检查列属性,并逐列修改。所以,列的属性设定、修改是高频基础知识点。

列的数值,即除了列名称外的、该列其它值。修改某个值,也是高频操作。不过我把这个知识点放到第四部分了。

对列的名称、列的属性进行修改,主要的关键词都是 ALTER,具体又分为以下几种情况。

情境A:新增一列。关键词 ADD

在你所指定的 column_name 后面定义列的属性。

ALTER TABLE table_name ADD COLUMN column_name char(20);

情境B:修改某列的名称。关键词 CHANGE

在修改列名的同时也可以重新指定列的属性。

ALTER TABLE table_name CHANGE old_column_name new_column_name char(50);

情境C:修改某列的属性。关键词是 MODIFY

ALTER TABLE table_name MODIFY column_name char(100);

四、sql语句:数据的增改删

通常提到数据库操作时,四字以蔽之:增删改查。

  • 查询,请看第二部分。关键词是 SELECT
  • 对数据所依赖的属性的增、改,请看第三部分。关键词是 ALTER
  • 数据的增加,在第一部分的数据交互中也给出实例,就不重复了。关键词是INSERT
  • 数据的修改,关键词是 UPDATE
  • 数据(甚至表格、库)的删除,关键词是DELETE

数据的修改,副关键词是 set

UPDATE table_name SET columns_name = new_value 【条件】;

新数值如果是数值类型的,则直接写数值即可;如果是文本类型的,必须要加上双引号,比如,“your_new_value”

如果把【条件】部分不写,就相当于修改整列的值;想要修改特定范围,就要用到条件表达式,这和前面的查询部分是一致的,就不再重复。

数据的删除,对于新手来说,是必须警惕的操作。因为一旦误操作,你将无力挽回。即便是职业程序员,也可能犯下无疑删库的惨剧。其基本语句为:

DELETE FROM table_name【条件】;

想要修改特定范围,就要用到条件表达式,这和前面的查询部分也是一致的,稍微啰嗦两句:不要对自己设定的条件太自信,最好先用搜索语句检查一下,然后再执行删除语句。

  • 删除单行数据:添加能唯一标识该行数据的条件语句。
  • 删除多行数据:添加能标识该范围的条件语句。
  • 删除整张表格:你是认真的吗?没有写错表格名字吧?! 做这项操作前,必须确认清楚自己的意图,毕竟一旦发生,无可挽回。

如果条件留空,将保留表结构,而删除所有数据行。想要删除整张表格,什么都不留下,则执行:

DELETE TABLE table_name;

俗称的“删库”就是删掉整个数据库,虽然实战中几乎不会用到,但作为新手经常手误,在练习阶段安全起见,最好还是专门创建一个 database 用于练手,练完直接删掉整个练习库:

DELETE DATABASE database_name;

如果简单总结下过去一个月,使用mysql的体验,那就是:除了mysql 的安装激活太麻烦,数据的增删改查比操作文本方便太多了!!完全值得容忍安装激活的麻烦。另外 mysql 常用语法确实简单、非常有规律。

希望我的总结带给你帮助。鼓励我继续分享,那就请点个赞吧!勘误请留言,或挪步我的github:https://github.com/liujuanjuan1984/ucanuupnobb/issues

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

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

相关文章

iphone的生命周期

ios应用的生命周期在开发过程中我们需要一些全局对象来将程序的各个部分连接起来&#xff0c;这些全局对象中最重要的就是UIApplication对象。但在实际编程中我们并不直接和UIApplication对象打交道&#xff0c;而是和其代理打交道。UIApplication 是iPhone应用程序的开始并且负…

基于Wemos的智能感应开盖垃圾桶——日记

参考&#xff1a;基于Wemos的智能感应开盖垃圾桶——日记 作者&#xff1a;9art0 发布时间&#xff1a;2020-09-24 00:40:59 网址&#xff1a;https://blog.csdn.net/GatoWong/article/details/108759063?spm1001.2014.3001.5501 1.项目软硬件平台及开发环境 1.1.硬件平台 1…

严格程度_国内医疗器械生产许可证申请申报-经营一类、二类、严格的三类之间区别...

医疗器械生产许可证是医疗器械生产企业必须持有的证件&#xff0c;由当地药监局审核颁发。开办医疗器械生产企业应当符合国家医疗器械行业发展规划和产业政策。医疗器械生产许可证同样也是根据生产医疗器械的种类不同&#xff0c;需要办理资质审批也是不同的&#xff0c;具体如…

matlab z变换离散化_用C++编写一个简单的光栅化渲染器:3D篇

3D光栅化与2D光栅化在图元绘制方面差别并不大&#xff0c;3D光栅化主要是多了很多坐标系(Local&#xff0c;world&#xff0c;View...)&#xff0c;除此外遮挡算法和裁剪算法也会稍微复杂一些。本篇文章的重点就主要集中在各种坐标系变换上。1.基本3D变换本文所采用的向量(vect…

Catalan数列

引入 今天听学长讲了卡特兰数列后对其有了更深的认识&#xff0c;在此完善了一下之前的博客加以总结。 首先用一个经典的例子来描述一下Catalan数列&#xff0c;我们有一个1~n的数列和一个大小为n的栈&#xff0c;我们有如下两种操作&#xff1a; 当未入栈序列不为空时&#xf…

计算机和外部通信方式,计算机和外部的通信方式

计算机和外部交换信息又称为通信(Communication)。按数据传送方式分为并行通信和串行通信两种基本方式。1、并行通信并行通信就是把传送数据的n位数用n条传输线同时传送。其优点是传送速度快、信息率高。并且&#xff0c;通常只要提供二条控制和状态线&#xff0c;就能完成CPU和…

stm32入门之keil5的安装以及第一个工程的建立

摘自&#xff1a;stm32入门之keil5的安装以及第一个工程的建立 作者&#xff1a;SKY丶丿平才 发布时间&#xff1a; 2020-12-06 17:08:30 网址&#xff1a;https://blog.csdn.net/weixin_48264057/article/details/110734596 文章目录 前言一、keil5的下载与安装1.下载相关链接…

微信电脑客户端_无聊的话,用微信玩玩电脑

被禁足的2020注定是让人印象深刻的一年如果现在你很无聊来试试用微信玩玩电脑看能否给这不出门就是做贡献的日子带来一点乐趣开启步骤1、在能使用(接触的)的电脑上安装上Hipc在电脑访问 hipc.cn下载PC客户端(仅2M左右大小)2、安装PC客户端3、微信扫一扫绑定现在看看如何用微信玩…

epic堡垒之夜显示服务器离线,堡垒之夜epic服务器进不去 | 手游网游页游攻略大全...

发布时间&#xff1a;2017-12-19堡垒之夜开国服了,那么有的小伙伴就发现自己的国服为什么进不去,下面牛游戏小编就为你们带来了堡垒之夜国服进不去的解决办法,想了解的小伙伴就一起来看看吧,希望能对你们有帮助. 解决办法如下: 1.重新下载并安装游戏,下载前关 ...标签&#xff…

动态加载 回显_ElementUI cascader级联动态加载及回显

先看图&#xff0c;你是否也遇到这个需求&#xff1f;如果你正在焦头烂额&#xff0c;无脑抓瞎&#xff0c;那么你来对地方了&#xff0c;因为我将给你一个简单易懂的实现方案。我也在网上翻了无数页答案&#xff0c;也照着别人的代码和思路尝试了&#xff0c;事实上并不能解决…

单片机的四种烧写方式

参考&#xff1a;单片机的四种烧写方式 作者&#xff1a;爱学习的小王呀 发布时间&#xff1a;2020-11-27 20:05:12 网址&#xff1a;https://blog.csdn.net/hongliwong/article/details/110245095?spm1001.2014.3001.5501 参考&#xff1a;单片机3种烧录方式解析 作者&#x…

关于驰骋表单引擎中字段扩展设置对文本框Pop窗体返回值的升级说明 2012/11/13...

为什么80%的码农都做不了架构师&#xff1f;>>> 关于驰骋表单引擎中字段扩展设置对文本框Pop窗体返回值的升级说明 2012/11/13 现有功能: 以前版本仅支持自己定义url&#xff0c;返回值到文本框上. 升级功能: 1, 增加了可以自己定义数据源模式&#xff0c;数据源可…

中兴f650 2.0.3 固件降级_手机资讯:如何升级iOS12.1.4正式版iOS12.1.4正式版升降级教程...

如今使用IT数码设备的小伙伴们是越来越多了&#xff0c;那么IT数码设备当中是有很多知识的&#xff0c;这些知识很多小伙伴一般都是不知道的&#xff0c;就好比最近就有很多小伙伴们想要知道如何升级正式版正式版升降级教程&#xff0c;那么既然现在大家对于如何升级正式版正式…

C# 加密解密类

一. MD5 1 防止看到明文 数据库密码&#xff0c;加盐(原密码固定字符串&#xff0c;然后再MD5/双MD5) 2 防篡改 3 急速秒传(第一次上传文件&#xff0c;保存md5摘要&#xff0c;第二次上传检查md5摘要) 4文件下载(防篡改&#xff0c;官方发布的时候给一个md5摘要&#xf…

请求solr服务器未响应,solr与tomcat整合

一、准备工作&#xff1a;我使用的是tomcat7.0,solr-4.8.1solr-4.8.1解压后是这样的。二、开始配置了1、首先要创建两个文件夹。home和server。我是创建在与solr-4.8.1同一根目录上的。D:\work-tool\server\solr\home和D:\work-tool\server\solr\server2、从solr-4.8.1\dist复制…

WeMos下实现小车避障与手机控制

参考&#xff1a;WeMos下实现小车避障与手机控制 作者&#xff1a;爱学习的小王呀 发布时间&#xff1a;2020-10-02 10:17:45 网址&#xff1a;https://blog.csdn.net/hongliwong/article/details/108900048?spm1001.2014.3001.5501 目录前言一、项目软硬件平台及开发环境1.硬…

苹果手机耗电快_iPhone12用5G耗电快,苹果回应

原标题&#xff1a;iPhone12用5G耗电快&#xff0c;苹果回应北京头条客户端10月24日消息&#xff0c;针对有媒体测试苹果iPhone12开启5G模式下&#xff0c;用电量提升的问题&#xff0c;苹果iPhone营销副总裁Kaiann Drance回应称&#xff0c;iPhone12 增加的智能数据模式可以平…

Ubuntu12 10下安装JDK7

为什么80%的码农都做不了架构师&#xff1f;>>> Ubuntu12 10版本下&#xff0c;不再预装JDK&#xff0c;包括OpenJdk&#xff0c;所以我们要从Oracle官网上下载java7的压缩包&#xff0c;选择适合自己电脑的安装包&#xff0c;我选的是jdk-7u9-linux-i586.tar.gz。…

neo4j python 算法_python操作neo4j简单实例

一&#xff1a;neo4j是什么neo4j:Neo4j是一个高性能的,NOSQL图形数据库,有关于更多neo4j的资料出门右拐二:python操作neo4j的实现python中neo4j的操作可以利用驱动包或者py2neo包&#xff0c;我采用py2neo第三方包实现以下简单功能&#xff0c;先建立一个neo4j的链接对于neo4j的…

尚硅谷的 ediary 笔记_干货分享 | 硅谷创新加速营第五讲教您合理规划融资需求 降低投资风险...

5月26日上午&#xff0c;康佳之星携手青岛蓝谷管理局、斯坦福青岛研究院、海尔海创汇联合举办的第二届硅谷创新加速营第五讲顺利完成。斯坦福青岛研究院董事长的Claude Leglise先生做客直播间&#xff0c;为现场创业者、企业家讲授创业之路必修课&#xff1a;企业财务规划。本讲…