当前位置: 首页 > news >正文

在vscode中安装jupyter

Jupyter 的安装及使用,超详细懂中文就会_jupyter安装-CSDN博客

修改jupyter 默认浏览器

1. 生成 Jupyter 配置文件

如果你还没有 Jupyter 的配置文件,可以通过终端以下命令生成:

jupyter notebook --generate-config

执行该命令后,会在你的用户目录下生成一个名为 .jupyter 的文件夹,其中包含 jupyter_notebook_config.py 配置文件。

2. 找到配置文件路径

一般来说,配置文件的路径在不同操作系统下有所不同:

  • WindowsC:\Users\你的用户名\.jupyter\jupyter_notebook_config.py

3. 编辑配置文件

使用文本编辑器打开 jupyter_notebook_config.py 文件,找到以下行(通常这行是被注释掉的,以 # 开头):

# c.NotebookApp.browser = ''

去掉这行前面的 # 注释符号,然后在其下方添加指定浏览器的代码。 

终端打开

jupyter notebook

运行当前单元格并选中下一个单元格
  • 快捷键Shift + Enter

运行当前单元格但不移动选中单元格
  • 快捷键Ctrl + Enter 

运行当前单元格并在下方插入新单元格
  • 快捷键Alt + Enter

在命令模式下(选中代码块头部)
  • A:在当前单元格上方插入一个新的单元格。
  • B:在当前单元格下方插入一个新的单元格。
  • Y:将当前单元格的类型设置为代码单元格。
  • M:将当前单元格的类型设置为 Markdown 单元格。
  • D + D:快速按下两次 D 键,可以删除当前选中的单元格。

 

import pymysql
import pandas as pd
# 连接mysql
conn = pymysql.connect(host='你的主机名', user='用户名',password='密码',database='数据库名称',charset="utf8")
sql_1 = "select * from table_name limit 10"
#利用pandas直接获取数据
data = pd.read_sql(sql_1, conn)
conn.close()

点new python3

 

重启内核

 

在 Jupyter Notebook 里若不借助 Python 语句,单纯使用 SQL 来操作 MySQL 数据库,你可以借助 ipython-sql 这个扩展工具。下面是详细的操作步骤与示例: 

1. 安装 ipython-sql 扩展

运用 pip 来安装 ipython-sql 扩展: 终端 pip install 

在 Jupyter Notebook 的代码单元格中输入以下命令并运行:

python

!pip install ipython-sql

安装完成后,你可以通过加载 ipython-sql 扩展来验证是否安装成功,在新的代码单元格中输入并运行以下代码:

%load_ext sql

如果你想使用 pandas 通过 SQL 查询来获取数据,你需要先创建一个 SQLAlchemy engine 连接对象。下面是如何设置和使用它的步骤:

1. 安装 SQLAlchemy 和 pymysql

如果你还没有安装 SQLAlchemypymysql,你可以通过以下命令安装:

pip install sqlalchemy pymysql

2. 创建数据库连接

使用 SQLAlchemy 来创建连接对象:

from sqlalchemy import create_engine# 创建数据库连接
engine = create_engine('mysql+pymysql://root:123456@localhost:3306/my_db')# 执行查询
import pandas as pd
query = "SELECT * FROM p_34bop_og_user"
result = pd.read_sql(query, con=engine)# 输出结果
print(result)

在这段代码中,create_engine 用于创建一个连接到 MySQL 数据库的 engine 对象。你可以根据你的数据库连接信息修改连接字符串(root:123456@localhost:3306/my_db),这里的 root 是用户名,123456 是密码,localhost:3306 是主机和端口,my_db 是数据库名称。

3. 执行查询

pd.read_sql(query, con=engine) 语句将 SQL 查询结果加载到 pandas DataFrame 中。

使用 pymysql 直接执行查询

如果你更倾向于使用 PyMySQL,也可以直接用 PyMySQL 执行查询,避免 SQLAlchemy 参与

只有这个可以用

import pymysql
import pandas as pd# 连接到数据库
connection = pymysql.connect(host='localhost',user='root',password='123456',database='my_db')# 定义查询
query = """
SELECT DISTINCT t1.COD_BRCH_OU_TR AS 机构号,t1.ID_INTL_USER_TR AS 员工号,t1.DATE_REQ AS 时间
FROM p_34tpup_ucap_term_jrn_infoa t1
INNER JOIN P_34BOP_OG_USER t3 ON t1.ID_INTL_USER_TR = t3.ID_INTL_USER_TRAND t3.NUM_ROL_USER in ('990050','990030','990310','990330','990051','990031','990311','990331') -- 柜员身份标识
WHERE NOT EXISTS (SELECT 1FROM p_34tpup_ucap_term_jrn_infoa t2WHERE t2.COD_BRCH_OU_TR = t1.COD_BRCH_OU_TR -- 关联同一机构AND t2.ID_INTL_USER_TR = t1.ID_INTL_USER_TR -- 关联同一员工AND t2.DATE_REQ = t1.DATE_REQ -- 关联同一天AND t2.COD_TR_BOEC_CLI = '61606' -- 操作代码限制AND t2.TIME_START_TR < STR_TO_DATE(CONCAT(t2.DATE_REQ, '140000'), '%Y%m%d%H%i%s.%f') -- 时间 >= 14:00:00);
"""# 使用 PyMySQL 执行查询
with connection.cursor() as cursor:cursor.execute(query)result = cursor.fetchall()columns = [desc[0] for desc in cursor.description]  # 获取列名result_df = pd.DataFrame(result, columns=columns)# 输出结果
print(result_df)# 关闭连接
connection.close()

使用 SQLAlchemy 执行查询

我们可以使用 SQLAlchemy 直接执行查询,并通过 pandas 获取结果。这样可以完全避免 PyMySQL 的格式化问题。

解决方法:使用 text() 包装 SQL 查询

text()SQLAlchemy 提供的一个函数,它将一个普通字符串转换为 SQL 查询的可执行对象。

from sqlalchemy import create_engine, text
import pandas as pd# 创建数据库连接
engine = create_engine('mysql+pymysql://root:123456@localhost:3306/my_db')# 定义查询
query = """
SELECT DISTINCT t1.COD_BRCH_OU_TR AS 机构号,t1.ID_INTL_USER_TR AS 员工号,t1.DATE_REQ AS 时间
FROM p_34tpup_ucap_term_jrn_infoa t1
INNER JOIN P_34BOP_OG_USER t3 ON t1.ID_INTL_USER_TR = t3.ID_INTL_USER_TRAND t3.NUM_ROL_USER in ('990050','990030','990310','990330','990051','990031','990311','990331') -- 柜员身份标识
WHERE NOT EXISTS (SELECT 1FROM p_34tpup_ucap_term_jrn_infoa t2WHERE t2.COD_BRCH_OU_TR = t1.COD_BRCH_OU_TR -- 关联同一机构AND t2.ID_INTL_USER_TR = t1.ID_INTL_USER_TR -- 关联同一员工AND t2.DATE_REQ = t1.DATE_REQ -- 关联同一天AND t2.COD_TR_BOEC_CLI = '61606' -- 操作代码限制AND t2.TIME_START_TR < STR_TO_DATE(CONCAT(t2.DATE_REQ, '140000'), '%Y%m%d%H%i%s.%f') -- 时间 >= 14:00:00);
"""# 通过 SQLAlchemy 执行查询
with engine.connect() as connection:result = connection.execute(text(query))result_df = pd.DataFrame(result.fetchall(), columns=result.keys())# 输出结果
print(result_df)

AND t2.TIME_START_TR < STR_TO_DATE(CONCAT(t2.DATE_REQ, '140000'), '%Y%m%d%H%i%s.%f') -- 时间 >= 14:00:00 因为TIME_START_TR 2023-03-10 11:01:10.978000是这样的格式,t2.DATE_REQ是20230310,加上140000,数字的格式也不一样呀,数字的个数也不同 ,为什么可以这样写呢,还能运行

这部分的作用是将 t2.DATE_REQ(格式为 YYYYMMDD)和 '140000'(代表 14:00:00,即 14 点整)拼接成一个新的字符串,再用 STR_TO_DATE() 转换为一个时间戳。具体来说:

1. t2.DATE_REQ'140000' 拼接

  • t2.DATE_REQ 是日期字符串,格式是 YYYYMMDD(例如:20230310)。
  • '140000' 是代表 14:00:00 的字符串,表示时间。

拼接后的字符串会是 YYYYMMDD + 140000,比如对于 20230310,拼接后的结果是:20230310140000,这就代表了 2023 年 3 月 10 日的 14:00:00

2. 使用 STR_TO_DATE() 转换为时间格式

  • STR_TO_DATE() 函数将拼接后的字符串转换成 DATETIME 类型。
  • 格式化字符串 '%Y%m%d%H%i%s' 告诉 MySQL 如何解析这个拼接的字符串:
    • %Y:四位年份(2023
    • %m:两位月份(03
    • %d:两位日期(10
    • %H:小时(14
    • %i:分钟(00
    • %s:秒数(00

3. 时间比较

  • 转换后的 STR_TO_DATE(CONCAT(t2.DATE_REQ, '140000'), '%Y%m%d%H%i%s') 会得到一个 DATETIME 类型的时间(例如:2023-03-10 14:00:00)。
  • 然后,t2.TIME_START_TR(如 2023-03-10 11:01:10.978000)会与该时间进行比较,看是否小于 14:00:00

为什么可以这样做?

  • 拼接日期和时间:通过拼接日期和时间,'140000'(即 14:00:00)能被正确地合并到 t2.DATE_REQ 中,形成一个完整的时间字符串。
  • STR_TO_DATE() 转换:MySQL 的 STR_TO_DATE() 函数非常灵活,能够根据你指定的格式将字符串转换为时间戳,即使原始数据是纯数字或字符串,能够将其转化为符合日期格式的时间。

总结

  • 通过拼接 t2.DATE_REQ(日期)和 '140000'(固定的时间部分),我们构造了一个新的时间字符串(YYYYMMDD140000)。
  • 然后,使用 STR_TO_DATE() 函数,将其转换为标准的 DATETIME 格式 YYYY-MM-DD HH:MM:SS
  • 这段 SQL 语句能够判断 t2.TIME_START_TR 是否在 14:00:00 之前。

这个 STR_TO_DATE() 调用确实是将拼接的字符串转换为标准的 DATETIME 格式:YYYY-MM-DD HH:MM:SS,并且会 忽略小数点后的微秒部分

详细分析:

  1. STR_TO_DATE(CONCAT(t2.DATE_REQ, '140000'), '%Y%m%d%H%i%s')

    • 这里的 STR_TO_DATE() 将拼接后的字符串(比如 20230310140000)转换为 DATETIME 类型。
    • 格式 '%Y%m%d%H%i%s' 指定了年、月、日、小时、分钟和秒,但没有包含微秒(即 .%f)。
    • 结果是 不包含微秒部分,只有到秒的精度:2023-03-10 14:00:00
  2. t2.TIME_START_TR 的格式是 YYYY-MM-DD HH:MM:SS.ssssss,包括微秒部分。

    • 当进行比较时,STR_TO_DATE() 转换后的结果是精确到秒的时间,而 t2.TIME_START_TR 仍然保留微秒部分。
    • 由于 STR_TO_DATE() 转换后不包含微秒部分,比较时会默认忽略微秒,只比较到秒。

举个例子:

假设 t2.DATE_REQ20230310(即 2023-03-10),并且我们拼接上 '140000'(表示 14:00:00),得到的结果是 20230310140000,转换后得到的时间是 2023-03-10 14:00:00(没有微秒部分)。

t2.TIME_START_TR 可能是 2023-03-10 11:01:10.978000,其中 10.978000 是微秒部分。由于 STR_TO_DATE() 只会转换到秒级别,比较时 t2.TIME_START_TR 的微秒部分会被忽略,只比较到 2023-03-10 11:01:10,因此微秒对结果没有影响。

总结:

  • 小数点后的微秒部分在这个查询中是被忽略的,因为 STR_TO_DATE() 中使用的格式 '%Y%m%d%H%i%s' 只处理到秒级别,没有处理微秒
  • 如果你希望包含微秒进行比较,需要调整格式化字符串,比如使用 '%Y%m%d%H%i%s.%f' 来处理微秒部分。

希望这个解释更清楚了!如果你有其他问题或者需要更详细的帮助,随时告诉我!

http://www.dtcms.com/a/273260.html

相关文章:

  • 电机电角度与机械角度的个人理解:从蒙圈到理解到放弃
  • 蓝桥云课 矩形切割-Java
  • 快速分页wpf
  • npx cowsay 让动物说话~
  • Java重试+事务的方式优化saveBatch,配置信息修改
  • Flink Exactly Once 和 幂等
  • 【郑大二年级信安小学期】Day9:XSS跨站攻击XSS绕过CSRF漏洞SSRF漏洞
  • 服务器深夜告警?可能是攻击前兆!
  • Unity插件——ABC详解
  • AI驱动的低代码革命:解构与重塑开发范式
  • LeetCode 8. 字符串转换整数 (atoi)
  • 【保姆级喂饭教程】idea中安装Conventional Commit插件
  • FreeRTOS—任务创建和删除的API函数和方法
  • 书生实训营第二关:大模型对战
  • 列表初始化
  • C++ Lambda 表达式详解
  • 《棒垒球知道》奥运会的吉祥物是什么·棒球1号位
  • 【c++八股文】Day6:using和typedef
  • [yolo-world]YOLO-World数据集介绍及标注格式详解
  • SoC程序如何使用单例模式运行
  • 什么是 MIT License?核心要点解析
  • [数据结构与算法] 优先队列 | 最小堆 C++
  • 几种LLM推理加速技术的区别
  • 列表页与详情页的智能识别:多维度判定方法与工业级实现
  • 海光芯赋能:国产化高性能计算平台,重塑边缘与工业智能新算力
  • 使用虚拟机远程登陆ensp模拟器交换机
  • ROS1学习第二弹
  • 1 C++提高——模板
  • H5微应用四端调试工具—网页版:深入解析与使用指南
  • FS-TAS如何提升电催化反应的效率-测试GO