首页 > 解决方案 > MySQL Python查询匹配行名与列名

问题描述

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

我的 mysql 数据库中有一个表,其中包含以下列:化学 ID、化学名称,以及列表中每种化学物质的一列。每行都有一种化学物质。字段中的值告诉我这两种化学物质是否可以在化合物中一起使用(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 的初学者,因此我将不胜感激。谢谢!

标签: pythonmysqlsqlmysql-python

解决方案


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

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

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

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


推荐阅读