python - 取决于表模式的不同 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
但是在所有适用于每个表的 where 子句中,mysqldump 都会遇到
解决方案
mysqldump的--where
选项可用于将表达式传递给每个表的 SELECT,但它将相同的表达式传递给所有表。
如果需要对不同的表子集使用不同的 WHERE 子句,则需要执行多个 mysqldump 命令,并对不同的表集执行每个命令
回复您的评论:
不,对 SQL 查询中列的引用必须在解析查询时固定,这意味着任何列引用都必须引用表中存在的列。没有办法在 SQL 中创建一个表达式,如果它们确实存在则使用列,如果列不存在则忽略列引用。
要执行您所描述的操作,您必须查询 INFORMATION_SCHEMA 以查看表中存在哪些列,然后根据您发现表中确实存在的列有条件地格式化 SQL 查询以进行转储。
但是在 mysqldump 中,你没有机会这样做。它必须在 mysqldump 的代码中实现。
随意获取 mysqldump 的源代码并向其中添加您自己的逻辑。不过似乎工作量很大。
推荐阅读
- php - 退出网页时清除数据库中的表
- amazon-web-services - kinesis firehose 在 s3 上传递的数据是版本化的,如何停用它?
- postgresql - 了解 Postgres 解释计划
- iis - IControllerFactory 'Munq.MVC.MunqControllerFactory' 没有返回名称为 'Home' 的控制器
- javascript - +(readLine()) 给出 ReferenceError
- java - Java 通用 lambda 记忆
- python-3.x - 简单的 UTF-16-LE 文本文件上的 chardet
- java - 通知多个适配器的最佳方式
- python - 为什么我在 python 中的二进制搜索程序无法正常工作?
- plotly - 在不同的 Windows 服务器上部署 plotly dash 仪表板