我想做一个SELECT语句,它将获取一个表中的所有数据+使用LEFT OUTER JOIN
跟踪该表中的所有外键。例如:
`orderitem`
id
name
title_id
`title`
id
name
在上面的例子中,我可以使用语句:
SELECT * FROM orderitem LEFT OUTER JOIN title on orderitem.title_id=title.id
有没有办法可以做到这一点,不知道表结构?也就是说,要具有如下功能:
def get_select_statement(table)
???
get_select_statement(orderitem)
==> "SELECT * FROM orderitem LEFT OUTER JOIN title on orderitem.title_id=title.id"
如何做到这一点?
为了澄清这个问题,我想我正在寻找这个功能的以下信息:
此外,请注意并非所有orderitem
都有title
,因此执行任何类型的INNER JOIN
都会删除数据。
答案 0 :(得分:1)
在MySQLDB中,您可以使用describe statement:
检索列名DESCRIBE table_name;
关于外键的所有信息:
select *
from information_schema.KEY_COLUMN_USAGE
where TABLE_SCHEMA = "schema_name"
and TABLE_NAME="table_name"
and REFERENCED_TABLE_NAME IS NOT NULL
要评估此查询并在python中加载结果,您可以使用SQLAlchemy包。例如。
engine = sqlalchemy.create_engine("mysqldb://user:password@host/db")
res = engine.execute("DESCRIBE table_name;")
columns = [row["Field"] for row in res]
res = engine.execute("{}".format(query_for_foreign_keys))
foreign_keys = [row["COLUMN_NAME"] for row in res]
referenced_column_names = [row["REFERENCED_COLUMN_NAME"] for row in res]
referenced_table_names = [row["REFERENCED_TABLE_NAME"] for row in res]
然后您可以使用上面的所有数据生成查询