MySQL Python查询匹配行名与列名

Posted

技术标签:

【中文标题】MySQL Python查询匹配行名与列名【英文标题】:MySQL Python Query matching row name with column name 【发布时间】:2020-10-13 03:55:54 【问题描述】:

我正在构建一个软件来将一些化学物质组合成不同的化合物(每种化合物可以有 1、2、3 或 4 种化学物质),但有些化学物质不能与其他一些化学物质结合。

我的 mysql 数据库中有一个表,其中包含以下列: Chemical_id、chemicalName 和我列表中每种化学品的一列。 每行都有一种化学物质。字段中的值告诉我这两种化学物质是否可以在化合物中一起使用(1 或 0)。所以所有化学品都有一行和一列。它们也是以相同的顺序创建的。这里(虚拟数据):https://imgur.com/a/e2Fbq1K

我有一个化学物质 ID 的 python 列表,我将把它与它们自身结合以制造 1、2、3 和 4 种化学物质的化合物,但我需要一个函数来确定它们中的任何两种是否不兼容。

我试图弄乱 INFORMATION_SCHEMA COLUMN_NAME,但我有点迷路了。 像这样的循环会起作用,但语法不会。

list_of_chemicals = ['ChemName1','ChemName2','ChemName3'] #etc
def verify_comp(a,b): #will be passed with chem names
mycursor.execute("SELECT chemicalName FROM chemical_compatibility WHERE chemical_id = 'ChemName1' AND 'ChemName2' = 0")
#etc

我曾尝试使用 %s 占位符,但它似乎只适用于 mysql 查询的某些部分。我是 Python 和 SQL 的初学者,因此我将不胜感激。 谢谢!

【问题讨论】:

规范化您的数据结构 - 如果它们兼容(或所有对和具有兼容性值的列),您必须有两次引用物质表的联结表。 是的,我有 4 个不同的表用于不同类型的兼容性。我现在有一个联结表,其中包含化学 ID1、化学 ID2(均来自单个化学表上的单个 ID)和每种兼容性 (0-1) 的一列。谢谢@Akina! 【参考方案1】:

我按照@Akina 的建议制作了一个新表,其中包含化学物质对和每对的相容性值。

我还了解到,除了占位符 %s,它只能用于 python 游标 sql 执行语句上的值,您也可以通过执行以下操作来使用 py 变量:

mycursor.execute("SELECT * FROM "+variablename+" WHERE condition = 1")

我不担心这个项目的 SQL 注入,也不知道我在这里说的是否 100% 正确,但也许它可以帮助那些迷路的人。

【讨论】:

以上是关于MySQL Python查询匹配行名与列名的主要内容,如果未能解决你的问题,请参考以下文章

将行名转换为列名,并按日期求和并显示数据

字段名与数据库中的列名不同

MySQL-基本查询条件查询排序查询

MySQL-基本查询条件查询排序查询

在python mysql查询中动态地传递列名和值。

在 python 中读取矩阵并获取行名和列名