取决于表架构的不同WHERE子句

时间:2018-06-27 16:09:18

标签: python mysql sql where

我正在尝试使用“ mysqldump”命令行工具为数据库进行mysql转储,并且正在寻找一种独特的方法。本质上,如果表包含某个列,则根据这些约束进行转储,否则,转储整个表。但是由于mysqldump命令行选项的性质,所有这些都必须放在一个WHERE子句中。

在伪代码中,这是我要做的:

if table.columns contains "user_id":
    where = "user_id=1" // dump rows where user_id=1
else:
    where = "TRUE" // dump whole table

但是在所有适用于每个表mysqldump的where子句中

1 个答案:

答案 0 :(得分:0)

mysqldump的--where选项可用于将表达式传递给每个表的SELECT,但是它将 same 表达式传递给 all 表。

如果需要对表的不同子集使用不同的WHERE子句,则需要执行多个mysqldump命令,并针对不同的表集执行每个命令


发表评论:

否,在解析查询时必须固定对SQL查询中列的引用,这意味着任何列引用都必须引用表中存在的列。如果在列中存在列,则无法在SQL中创建使用列的表达式;在列不存在时,该表达式将忽略列引用。

要执行所描述的操作,您将必须查询INFORMATION_SCHEMA以查看表中存在哪些列,然后根据发现的表中存在的列,有条件地格式化转储的SQL查询。

但是在mysqldump中,您没有机会这样做。它必须在mysqldump的代码中实现。

可以随时获取mysqldump的源代码,并为其添加自己的逻辑。似乎需要做很多工作。

相关问题