2017-02-23 65 views
0

使用部分我有字典,看起來像這樣:蟒蛇:字典密鑰變量字典值

mapper = { 
    "bigint(20)": "= Column(BigInteger)", 
    "int(11)": "= Column(Integer)", 
    "`": "", 
    "varchar(255)": "= Column(String)", 
} 

我映射SQL數據類型命名爲SQLAlchemy的樣被替換成一個文本文件。到目前爲止,我只是將int映射到整數,將varchar映射到string等等。然而,我的想法是使用部分密鑰作爲變量傳遞給它的相對值,即避免使用硬編碼varchar(255)並使用varchar(x)傳遞給它的相對值= Column(String()),其值爲= Column(String(x))

喜歡的東西:

"varchar(x)": "= Column(String{})".format(x), 

你有什麼建議,如何做到這一點?謝謝

+2

我不確定我的理解,但它可能只是我.. –

+1

你能提供一個輸入數據的例子,以及你想達到的目的嗎(看起來你只需要編寫一個函數來找到'varchar',請提取以下括號並替換爲'Column(String {})'。format(value)) – debzsud

回答

0

A dict是一組固定的密鑰;你不能單獨使用dict

但是,您可以繼承dict以提供__getitem__的定義,該定義可以做到您想要的。喜歡的東西

import re 
class SQLDict(dict): 
    def __getitem__(self, key): 
     m = re.match('^varchar\((.*)\)$', key) 
     if m: 
      return super(SQLDict, self).__getitem__('varchar(x)') % (m.group(1),) 
     else: 
      return super(SQLDIct,self).__getitem__(key) 

mapper = SQLDict({ 
    "bigint(20)": "= Column(BigInteger)", 
    "int(11)": "= Column(Integer)", 
    "`": "", 
    "varchar(x)": "= Column(String(%s))", 
}) 

想出來......

>>> print mapper['varchar(15)'] 
'=Column(String(215))' 

它並不完美;我已將varchar(x)硬編碼到__getitem__的定義中,而您可以將mapper定義爲具有代替varchar(y)的密鑰。但是這應該讓你開始。

+0

謝謝。這應該讓我開始! – diegus