2015-10-23 16 views
0

我想要執行一條SELECT語句,該語句將獲取一個表中的所有數據,並使用LEFT OUTER JOIN跟隨該表中的所有外鍵。例如:如何在所有外鍵之後執行SELECT *

在上面的例子中,我將能夠使用語句:

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" 

這將如何完成?

要弄清這個問題,我想我正在尋找此功能的以下信息:

  • 什麼是在給定表中的所有列名?
  • 他們在ForeignKey關係中引用了哪些表以及哪些關係能夠加入?

此外,請注意,並非所有的orderitem旨意有title,所以做任何形式的INNER JOIN會刪除數據。

+0

查詢庫/ ORM是您使用到表中的模型是什麼SQL? – Pynchia

+0

非常有限的信息來回答這個問題。但是你的查詢應該是內部連接沒有左連接 –

+0

如果你使用'USING(name,id)'子句而不是'ON'語句怎麼辦? – McGlothlin

回答

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:[email protected]/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] 

然後,你可以使用產生的所有數據上面

相關問題