python - 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 的初学者,因此我将不胜感激。谢谢!
解决方案
我按照@Akina 的建议制作了一个新表,其中包含化学物质对和每对的兼容性值。
我还了解到,除了占位符 %s(只能用于 python 游标 sql 执行语句上的值)之外,您也可以通过执行以下操作来使用 py 变量:
mycursor.execute("SELECT * FROM "+variablename+" WHERE condition = 1")
我不担心这个项目的 SQL 注入,也不知道我在这里所说的是否 100% 正确,但也许它可以帮助那些迷路的人。
推荐阅读
- python - 如何跳过文件中已经存在的行?
- unit-testing - 为什么要使用 amount.token 来初始化 Paid 变量?
- swift - 为什么它不能转换类型的返回表达式?
- xml - 如何对没有ID的不同元素进行分组,删除重复项并在xslt中添加组ID?
- haskell - 这段haskell代码是否正确,如果是,为什么?
- php - 我想按另一个表的主键和另一个列显示一个表顺序的记录
- javascript - 获取类型文件输入的值
- laravel - Laravel 搜索引擎调试页面
- javascript - 如何等到设置 cookie?
- eclipse - 在运行时配置 Xtext 生成器