我的字典看起来像这样:
mapper = {
"bigint(20)": "= Column(BigInteger)",
"int(11)": "= Column(Integer)",
"`": "",
"varchar(255)": "= Column(String)",
}
我将sql数据类型命名映射到sqlalchemy-like以替换为文本文件。到目前为止,我只是将int映射到整数,将varchar映射到字符串等等。但是,我的想法是使用键的一部分作为变量传递给它的相对值,即避免硬编码varchar(255)
并使用varchar(x)
传递给它的相对值= Column(String())
= Column(String(x))
。
类似的东西:
"varchar(x)": "= Column(String{})".format(x),
您对如何实现这一点有什么建议吗?谢谢
答案 0 :(得分:0)
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)
这样的密钥。但这应该让你开始。