We're sunsetting PodQuest on 2025-07-28. Thank you for your support!
Export Podcast Subscriptions
cover of episode #423 Traveling the Python Universe

#423 Traveling the Python Universe

2025/3/10
logo of podcast Python Bytes

Python Bytes

AI Deep Dive AI Chapters Transcript
People
B
Brian
Python 开发者和播客主持人,专注于测试和软件开发教育。
M
Michael
帮助医生和高收入专业人士管理财务的金融教育者和播客主持人。
Topics
Michael: 我介绍了 PySQLscribe 这个库,它可以帮助简化 SQL 查询的编写。通过指定数据库方言(例如 MySQL、PostgreSQL、Oracle)和表结构,你可以使用它来构建各种复杂的 SQL 语句,包括 JOIN 和聚合函数。它可以减少编写和调试 SQL 查询所需的时间和精力,尤其对于那些不经常编写 SQL 查询的 Python 开发者来说非常有用。 我个人认为,PySQLscribe 的一个潜在改进方向是自动识别数据库表结构。如果能够通过提供数据库的 CREATE 语句或其他元数据来自动生成表结构信息,那么使用 PySQLscribe 将更加方便快捷。 总的来说,PySQLscribe 是一个有用的工具,可以提高 Python 开发者的工作效率,特别是对于那些需要与数据库交互的项目。 Brian: 我分享了两个关于 Python 生态系统和趋势的资源。第一个是一个 PyPI 包依赖关系的可视化工具,它展示了 Python 包之间的复杂依赖关系,并引发了关于大型数据集处理和数据可视化方法的讨论。这对于理解 Python 包的生态系统和依赖关系非常有帮助。 第二个资源是关于 Hacker News 上 Python、Rust 和 C++ 编程语言职位需求的分析。分析显示,虽然 Python 的招聘需求有所下降,但求职者数量增长迅速,这表明 Python 职位仍然很抢手。此外,分析还讨论了内存安全语言(如 Rust)的兴起及其对 C++ 等传统语言的影响。 总的来说,这两个资源都提供了关于 Python 生态系统和趋势的宝贵见解,有助于开发者更好地理解 Python 的发展方向和未来趋势。

Deep Dive

Chapters
This chapter introduces PySQLscribe, a Python library that simplifies the process of building SQL queries. It allows users to define database dialects, tables, and columns, then construct queries using a builder object, generating SQL statements automatically. The discussion also includes potential extensions like parsing create scripts for automated table structure recognition.
  • PySQLscribe simplifies SQL query construction in Python.
  • Supports various database dialects.
  • Allows defining tables and columns for query building.
  • Potential for extension to parse database create scripts for automated table structure recognition.

Shownotes Transcript

您好,欢迎收听 Python Bytes,我们将直接为您带来 Python 新闻和头条新闻。这是 2025 年 3 月 10 日录制的第 423 集,我是 Brian Ocken。我是 Michael Kennedy。再次感谢大家通过 pythontest.com 和

Talk python.fm 上的培训课程对我们的大力支持。那里有很多很棒的课程。当然还有我们的赞助支持者,谢谢你们。对于那些想联系我们的人,如果您对节目有任何建议、问题或更正,可以通过 pythonbyst.fm 联系我们,节目说明中也有我们蓝天和

Mastodon 链接,您也可以在 pythonbytes.fm 上注册,查看下一个直播节目的时间,或者注册新闻通讯,将我们讨论的所有内容直接发送到您的收件箱,这很酷。是的,您也可以在 YouTube 上点击那个铃铛图标,哦,是的,订阅 YouTube 频道,那将非常棒……是的,是的,所以

说到订阅或描述,我们首先讨论什么?好吧,Brian,你的 SQL 技术怎么样?实际上有点弱。是的,我的也一样。它有点萎缩了。你知道,我有一个表,还有一个表,我想在这个表上进行连接,然后也许我想使用一个聚合函数。我该如何再次操作呢?有很多很酷的工具和库可以解决这个问题。例如,您可以使用 SQL Alchemy 或 SQL Model……

然后你只需要用 Python 的术语、类等等来表达。然后不知何故,当它访问数据库时,它会在深处为您完成这些工作。你仍然需要了解查询。所以它并不完美,但它确实完美地解决了这个问题。但是我想向大家介绍一个名为 PySQL scribe 的新工具。这里的想法与此类似,除了您将其用于真实的 SQL。例如,如果……

你想知道如何进行这些连接之一,或者你想在这样做时获得一些支持,而你又没有使用 SQL Alchemy,那么说“让我重新实现我在 SQL Alchemy 中所做的一切,以便我可以向它提出一个问题来获得一个我只想在 SQL Alchemy 之外使用的简单 SQL 语句”是不合理的。

所以这就是它的作用。您可以使用它来了解不同的内容,您正在使用的数据库,因为即使 SQL 是一种通用的查询语言,它通常也不能用于任何数据库。每个数据库都有自己的方言

好的,例如,您指定“为 MySQL 指定参数”的方式与为 Microsoft SQL Server 指定参数的方式不同。虽然它们相似,但并不相同。因此,您使用此工具的方式是说:“我正在使用这个特定的数据库。”然后你说,你提供关于你的表的信息,对吧?所以这是一个表名,这是它的列,等等。然后你可以说,“创建一个小的构建器”,然后说,“builder.select 这个列,那个列”。

来自这个表,构建,它构建的是它输出某种 select 或 SQL 语句。在这种情况下,从表中选择各种列。很酷,对吧?是的。是的。但是你可以做更多的事情。你可以,让我们看看,你可以通过创建一个带有装饰器的类来创建你自己的类。然后它会知道,基本上你可以创建你自己的查询,或者你可以创建你自己的

例如,这是一个 MySQL 表。您不必指定方言,因为它是一个 MySQL 表。它知道方言。如果您向下滚动,您会发现它理解更复杂的事情,例如连接。就像我先想选择这个东西。然后我想在这个表上连接 iCloud。

在这个东西上,然后构建,它会为你编写连接语句,这非常巧妙。正如我所说,你也可以做函数。让我向下滚动一点。例如,如果您想编写一个在 select 语句中执行大写或从那里获取某个值的 max 的内容,对吧?以及 group by 类型的东西。

因此,您可以使用 SQL scribe(PI SQL scribe)编写它,然后它会实际为您生成所有这些内容。这很巧妙。最后,如果您在一个构建器中嵌套另一个构建器,您可以将它们组合起来。

它会连接。这是一件更复杂的事情。因此,您使用 SQL 的次数越多,这可能就越有用。如果您只是执行一些简单的 select 和 where 语句,那么它可能没有那么有用。但这就是我的第一项。我认为这可能会帮助一些人。是的,我想你可能是问这个问题的合适人选,但我只是很好奇用例。所以,比如……

例如,如果您有一个应用程序,用户可以选择他们连接的数据库,然后您可以根据该数据库创建不同的功能,我想。是的,我认为它不是操作性的。我认为它更……因为如果您在操作上这样做,只需使用 ORM 即可。好的。因为它会这样做,对吧?我认为它是……

我希望这个东西能帮助我编写查询,因为我有时会忘记。例如,如果您正在进行数据科学,您可能会连接到不同的数据源。您可能会说,哦,我想问这个问题,但这可能是一个连接。我该如何再次操作呢?等等。好的。是的,实际上,我只是在考虑编写一个应用程序,我想,它非常轻量级。我并不真正想要一个 ORM。

所以我打算使用原始 SQL,但是然后我……所以你可能会运行这个。您可以提供您的规范,运行一次,然后将响应作为参数化查询硬编码到您的 Python 代码中,并且直到您可能需要以足够复杂的方式更改查询时才再次访问它,您无法只键入另一列或其他内容。你知道我的意思吗?是的。好的。是的。有趣。酷。我在这里添加了一个补充……

有点。我想,当我为这个做准备时,我想到的一个想法是,你知道吗?键入列名和可用表似乎应该自动化。所以我不确定 Daniel(创建它的人)

是否对此感兴趣,但我说道,嘿,如果你可以提供一个创建脚本,那不是很好吗?您可以转到您的数据库并说,为整个数据库创建完整的创建脚本,其中包含所有列、关系和索引以及所有这些内容。您可以将其指向它,然后

它可以生成所有表作为您按表名调用的内部内容,然后它会自动知道所有表的结构,对吧?所以我说道,嘿,也许你可以让它解析 SQL 数据定义语言创建脚本之类的东西,所以我给出了一个你可以做的事情的例子,所以谁知道它是否会实现,如果你喜欢这个想法与否,但我认为有一些很酷的方法可以扩展这个很酷的不错,是的,轮到你了

好吧,我要添加,我要查看 Python 的地图。所以我遇到了这篇文章。这很酷。这个想法是围绕着查看 PyPI,那里有很多软件包,但是它们之间有很多依赖关系,并且可视化 Python 的方式

如果我们可视化所有这些,它会是什么样子?这里有一些可视化效果。我实际上在尝试解释这一点时有点迷失了方向,但这只是点。但是你可以放大其中的一些。滚动轮在这个上面可以放大。我无法弄清楚间距是什么意思。无论如何,为什么我……好的,既然我不太知道这是在做什么,为什么我要介绍它呢?

我认为很棒的一件事是它只是围绕处理大型数据进行的讨论。PyPI 的数据集是一个相当大的数据集。BigQuery 中有副本,因此您可以查询它,而不是一直查询 PyPI,这也是我使用 Python 或 PyTest 插件列表所做的事情。

但是有一些讨论。好吧,那里有一些垃圾。有一些软件包没有列出源代码或其他使它们不真正开放源代码的内容。它们只是在利用 PyPI 或其他什么东西。有时公司会这样做。无论如何,因此围绕过滤它有一些讨论,这是一个有趣的讨论。然后关于决定什么,

图形机制以及如何可视化它的一些讨论。所以我真的很欣赏这场讨论。因此,如果您喜欢可视化数据,我认为这可能是一件有趣的事情。此外,它只是一个非常有趣的可视化效果。然后在最后,有一个链接说,哦,顺便说一句,这里有一个更好的 UI。就像,好吧,让我们来看看。这太酷了。这是宇宙飞船。

我不知道宇宙飞船操作手册……哇,所以这就像 Python 的星系,让我们看看我们是否有 w 和 s 来前进和后退,第一个有点像我不知道的老式地图,它真的很酷,但老式地图,就像你知道的,像航海和探索的日子,而这是像哈勃一样……是的,看看这个,如果我们前进和后退,哎呀

哎呀。让我们看看我们能否让它运行。这太棒了。对于收听节目的朋友们,我正在放大,就像你正在穿过星系一样。这些是我们周围的 Python 依赖项。这是一个有趣的,我不知道,视频游戏,视频可视化。我要玩它。我以前从未见过这个。我稍后会玩这个。谢谢。你刚刚浪费了我半小时的时间。不客气。是的。所以这一切……

也在 GitHub 上,所以如果你想看看他是如何进行过滤的,我链接到这个,因为我要看看他是如何做的。所以即使是复制指南也说有 SQL 查询。因此,如果您想围绕 PyPI 做一些 BigQuery 工作,这里有一个示例。有 Process JSON,所以他如何使用过滤器等等。

然后将其转换为图形。一些很棒的、不错的开源或不错的关于如何处理数据和可视化等等的示例。是的,我喜欢它。它很漂亮。非常非常酷。您必须点击链接才能浏览它。是的,玩那个太空游戏。那很有趣。是的,太空游戏是我想到的那个。

太棒了。想谈谈 Rust、C++ 和 Python 吗?我听说 Bjorn 说 C++ 正在受到攻击,Brian。你对此有何感想?它正在受到攻击。我认为是这样。我听说人们这么说。我听说过很多,我们真的知道软件应该用内存安全的语言编写,而这在 C++ 中行不通。无论如何,这不是重点。是的,我稍后会添加一个评论,所以是的。

好的,我来了。我来了。但这并不是它的重点。这是 Martin Ociak 编写的,它是 Hacker News 上的 Rust、C++ 和 Python 就业趋势。

有趣。是的。所以有,我不知道他是如何找到这些数据的,但不知何故,嘿,看看,也许 Hacker News 上的对话可以作为编程语言就业需求的替代指标。所以有两个问题,你知道,问 Hacker News 谁在招聘,问 Hacker News 谁想被招聘,时间是 2025 年 2 月。然后是……

Python、Rust 和 C++ 的出现次数图表。如果您查看它,并且此数据实际上可以追溯到,我不知道,我想它是截至 2 月的,但这可以追溯到 2021 年。所以这是相当长期的数据,五年,四年。

因此,如果您查看 Python,它正在急剧下降。C++ 和 Rust 也是如此,尽管它们开始占据,我想它们都在最后开始占据。但是 Python 的下降速度比其他两个快。那意味着什么?就像人们……

以越来越快的速度,人们不再询问谁正在使用某种特定语言招聘,对吧?现在,如果您查看另一个,反过来,谁想被雇用?就像,嘿,我们需要人。我们需要这个行业的人。

它们总体上都在略微上升,但 Python 的上升速度要快得多。如果你是那些寻求被雇用的人,越来越多的人会说,我在哪里可以找到 Python 人才?看起来随着时间的推移,对 Python 人才的需求越来越大。对 C++ 人才的需求仍然更大,对 Rust 人才的需求也更大,但速度较慢。有趣,是吗?是的。我看着这个图表一段时间都感到非常沮丧。

因为所有程序员(至少对于 C++、Rust 和 Python)的急剧下降趋势,我就像,哦,不。但看起来,如果您只从 2021 年到现在来看,这是一个下降的斜坡。但如果它有点……哪个呢?谁在招聘还是谁想被招聘?好吧,我想我不明白。就像谁在招聘一样。是的。

如果是那些试图找到工作但没有工作或想要工作的人。好的。对。他们根本没有工作,或者他们有一份他们不想要的工作。他们想要一份该技术领域的工作。好的。谁想雇用 Python?哦,对。所以这下降的事实意味着越来越少的人没有他们想要的工作。对。他们就像,他们有工作。这是一件好事。而且他们工作得相当开心。所以下降的事实是好事。然后你看看下一个。我不知道这是好是坏,但每人人数较少。

他们不容易找到工作。以比其他语言更快的速度,越来越难找到 Python 工作。这意味着基本上,雇主需求更多,我很确定。- 这说得通。- 每位候选人,我想,如果你这么说的话。- 那更乐观了。- 是的,我认为两个图表都比较乐观。这取决于你如何解读它。- 是的。- 是的,我的意思是,这是 Hacker News,对吧?但这仍然是一个有趣的角度,你知道吗?- 是的。

我,我想我对 C++ 与其他事物或 C++ 的消亡或其他什么的看法是,我认为我们不会看到 C++ 的消亡。但是有很多东西……

很难学习。毫无疑问。我认为 Rust 也很难学习。但是,我认为对于人们来说,在一个小型项目中快速掌握 Rust 比 Python 更容易管理。但我可能对此错了。但是

我认为,我们需要做的是,我认为 Rust 的一个优势是,我们需要一种方法,它围绕着 Python,就是我们有这个很棒的 Python 项目,但是这里有一小部分需要加速。我们该怎么办?我们是否会跳入我们不了解的 C++ 或我们不了解的 Rust?我认为人们正在选择 Rust。无论如何,这就是我的看法。是的,我最近听了一些网络安全、计算机安全播客。

有一些关于如果你要……你知道,他们刚刚做了,天哪,其中一个刚刚做了一个分析,并说,我认为所有 iOS 安全问题的 70% 或 80% 是内存、内存、损坏、内存故障问题,对吧。数组越界、释放后使用,对吧?就像因为你使用的是内存不安全的语言而发生的所有事情一样。嗯,

微软的情况类似,软件中 60% 到 70% 的安全问题都与内存问题有关。哦,是的。他说,你可以一个接一个地检查它们。它们都有这种味道,即使数字不完全相同。你知道我的意思吗?是的。因此,如果您选择新的软件,

您正在选择从头开始的新项目,并且您正在选择一些系统级语言,例如 C、C++、Rust 等。如果您不选择内存安全的语言,那么您基本上是在选择让您的软件漏洞多出两倍半。我认为这就是我的语言正在受到攻击的感觉。就像,是的,但是……

事实仍然是事实,对不起,但它是,你知道吗?是的。你可以用 C++ 做一些事情,对吧?编写这些智能指针之类的东西,它们会自动释放它们等等,但可能不适用于 C,但它仍然存在,你知道,仍然有 S printf 是错误的,或者其他什么。是的。我想我一生中的大部分时间都花在了设备驱动程序等低级世界中,C++ 的一件美妙的事情是内存映射硬件访问系统真的很容易在 C++ 中组合在一起。我不知道如何在其他地方做到这一点。我的意思是,我相信有方法。而且我们总是会有软件与硬件进行通信。所以除非在另一种语言中这样做变得非常容易,否则我们将拥有 C++。MARK MANDEL:是的,或者有人构建了一个小层

- 好吧,它可能已经存在了。我们只是不知道。我不了解它。- 是的,是的,是的。我也不了解。我这些天不生活在这个世界里。无论如何,这些东西非常有趣。是的,是的。好吧,轮到你了,你的最后一件事。- 好吧,所以有帮助,它只有一个关键字之遥。

我,你知道,我有时会忘记这一点。因此,如果您对 Python 世界或任何事情有疑问,那么仅仅搜索一下就非常诱人。我的意思是,我现在正在使用什么?不是 Google,而是其他东西,一些 Google 的替代品。但是那里有帮助,而且非常好。因此,链接到 Trey Hunter 的文章,Python 的 help 函数的功能,以及 help 在

在 Python 中内置的方面非常好。我不知道它是否从一开始就是语言的一部分,但在我使用它的时间里,它一直都在那里。

但是如果您说 help,您可以为其提供一个字符串,您可以说对函数的 help。您可以说对模块符号、关键字、主题、对象的 help,并且通常会输出有用的内容。因此,这篇文章正在讨论您可以做的一些事情。我喜欢的一件事是查看元帮助。元帮助非常有趣。您可以拥有,基本上,如果您说 help 并提供引号主题,您将获得可用主题的列表,并且

您有像字符串这样的东西。我查了一下字符串。我想,好吧,我不知道如何使用字符串,但我查了一下。字符串中的一件事是所有这些转义代码。例如,换行符代码是什么样的?什么是,你知道,所有这些,这些都在反斜杠 T 反斜杠 N 中,但肯定有一些我不知道的。是的。还有很多其他的。所以有很多有趣的信息在这里。我认为我记得看过一个,

我不知道,像文字和这里的一些其他东西。命名空间是一个很好的例子。关于 None 的一个非常好的讨论。

以及数字和对象。这里有很多关于 Python 的很棒的信息,只需使用 help 实用程序即可获得。所以我们来看一下。帮助符号。所以这里列出了 Python 的所有符号。如果您好奇所有关键字是什么。哦,是的。你只需要列出所有关键字。Python 的关键字实际上并不多。哇。这非常有趣。无论如何。是的。不要忘记 help。

这些关键字是您不能在 Python 中用作变量或函数或更广泛地说符号的内容。我刚刚从这个 PySQL scribe 中意识到这一点。我想,为什么你必须说 select thing 和 dot from underscore?我知道旧的解析器,这可能是这种情况,对吧?是的。因为它只是查找单词 from。但是有了新的,比如,

peg 解析器前瞻性事物。我认为,哦,它足够聪明,知道这在表达式中使用,而不是关键字。不。所以你可以说 help symbols 和 keywords。这些是你根本无法命名符号的内容。是的。你并不需要记住它们,因为 Python 不会让你,它只会说,嘿,这是一个关键字。是的。不要那样做。不能那样做。

是的,当然。当然。好的。额外内容。你怎么看?是的。额外内容会很棒。你有吗?有吗?是的,我有一个。快速,快速,快速。所以上周我提到 Grinion 发展势头强劲。有多少星?我们有 3200 个。这是基于 Rust 的。哦,是的。这基本上是 Hyper 的一个方便的包装器,对吧?Hyper 是 Rust 的包装器。

HTTP 引擎,它有 15000 个星。所以你很受欢迎,但是他们发布了 2.0 版本,这意味着 FastAPI 和可能很多 starlet 内容也停止工作了。哎呀。

第二天,Outroll 发布了补丁版本 201,自 2.0.0 版本以来的更改,修复了一个回归错误,该错误阻止任何 I/O 线程 .run sync 工作。FastAPI 大量使用了任何 I/O。这似乎可能是问题所在。

再次尝试,所有 FastAPI 内容都恢复正常了。酷。所以只是对上周的后续说明。是的。我通常不会指出这一点,但因为我说它不起作用,所以如果它现在再次起作用,我会把它放回复选框中。好吧。这就是我所拥有的全部。

快速简便,我没有额外内容,尽管它只是让我想起,我想我没有为此创建一个页面,但是查看依赖项时,我不得不调出,我正在寻找,我有一组大型的大型软件包一起工作,内部的东西正在使用 greenlit,我就像,什么东西正在使用 greenlit,并且

我调出了 pip-dep-tree。哦,是的。我喜欢 pip-dep-tree,它可以快速查看您安装了什么以及有哪些依赖项。因此,我很容易搜索到它,并发现 Playwright 正在使用 Greenlit。我就像,哦,好吧,我相信他们有充分的理由使用它。是的。

我只需要更新我的 playwright,我们就完成了。优秀。是的,我经常使用它。它真的很好。我使用 uv-pip-compile,它现在将这些信息嵌入到 requirements.txt 文件中,这也很不错。哦,是的。好的,是的,是的。所以我最近没有经常使用它,但是如果您参与的任何项目都没有这些生成的其中一个文件,那么它……另一个您可能会遇到的问题……

只是让它生成内容是,我不知道你怎么样,但是当你向你的 requirements 文件添加内容时,它可能是 pyproject.toml 或 requirements.txt 等效文件或其他什么,很容易将内容放入其中,然后不将其删除。因为就像,我认为我不再使用它了,但这可能会破坏东西,让我们只是,它在里面有什么坏处呢?你知道,这很容易变得陈旧。所以,你知道,你可以从 pip dev tree 中更好地了解它。无论如何,是的。

讲个笑话怎么样?听起来不错。我带来了一系列关于技术的相互冲突的阴谋论。听起来很有趣,对吧?是的。所以这里有一个地平论者。

我完全支持取笑地平论者。我是一名计算机工程师,我确认地球是平的。显然,地平协会秘书约翰·戴维斯。你不是一个人,Brian。仅仅因为你周围没有人认为地球是平的,并不意味着互联网上没有一群人。遍布全球。遍布全球。那么回应是什么呢?好的。

我是一名地质学家,我说计算机之所以能工作,是因为里面有非常小的人在做所有工作。是的。回敬你。我认为回敬你。然后是副标题,或者如果不是,但如果是 XKCD,悬停,无论那是什么,都说地球是平的与计算机之所以能工作,是因为里面有非常小的人在做所有工作。地质学家是否受到了亚马逊的“即走即付”技术的启发?是的。

记住,你知道这背后的故事吗?你知道亚马逊,就像走进商店,随处挑选你想要的东西,你登记你的卡,随处挑选你想要的东西,然后你走出去,他们就向你收费?是的。我很确定……

我现在手头上没有任何可靠的资料来源,但这实际上,与其说是超级智能的AI,就像它被宣传的那样,不如说是那些在国家里,廉价到足以支付的人,只是坐在那里看着摄像头,就像记下你拿了什么东西。然后,也许有一天它最终会被AI和视频识别技术驱动,但是,

正在运行的版本只是人们通过摄像头观察你,并在你拿起和放下东西时将其记录下来。是的,很有趣。好的,我认为这就是那里的参考。这很有趣。有人前几天发布了一些关于人们正在做的研究。就像,很多人都在将AI用于某些事情,我也在将它用于某些事情。但是,但是对于一些公司正在做的事情,例如,他们正在整理任务列表,并让它,

如果他们要雇一个人来做这件事,一个人应该能够完成这项任务,而这就是他们应该得到的输出。然后将这些测试应用于AI代理和其他使用AI的方法,并以此方式对其进行评级。

如果你这样做,并让领域专家提出这些测试,AI的表现并不好。但其中一个结果是关于16%的正确率。评论是,虽然令人印象深刻,但它继续说下去,而我想,虽然令人印象深刻,但这并不是,我从未在学校获得16%的分数,然后有人说,哇,这令人印象深刻。是的,你在那里得到了一个好成绩。是的。

就是这样。《商业内幕》。哦,滚开,饼干。亚马逊的“即走即付”技术依赖于数百名在印度工作的员工来观察你的购物行为。这太荒谬了。是的,我以为是RFID之类的东西。不,这是魔法。这是魔法。是的。多么无聊的工作。或者也许很有趣。我不知道。观察人们购物。

也许吧。无论如何。好的,像往常一样,这是一集好节目。很高兴和你交谈。感谢大家收听。我们下周再见。是的,谢谢。再见。