我需要创建以前未知的现有表的模型。其他人有said到
您可以查看inspectdb代码,而不是输出代码返回 类。
但对于一个蟒蛇新手我遇到了困难。谁能提供一个更具体的例子来说明如何做到这一点?非常感谢。
更新:我正在探索this。看起来很有希望。似乎有几种创建动态模型的选项,其中一些虽然需要非mySQL dbs(参见this stackoverflow Q)
UPDATE2:我现在可以使用以下函数在运行时创建以前未知的mysql表的模型。当我尝试查询模型时,对于一个名为'table1'的表,我得到“表'djangodb.subscription_table1'不存在”)。当我将'table1'重命名为'subscription_table1'时,我收到此错误:“表'djangodb.subscription_subscription_tb2f1e1e47d73417ab2b187bc4a08bf57'不存在”)。
HELP!
最终更新:我为我的特定问题采用了另一种解决方案:Django - List of Dictionaries to Tables2
def getModel(table_name):
myColumns=getColumns(table_name)
attrs = {}
attrs['__module__'] = 'subscription.models'
for x,y in myColumns.items():
fieldType = y["type"]
if x == 'id': ''
elif fieldType == "char": attrs[x]=models.CharField(max_length='length')
elif fieldType == "float": attrs[x]=models.FloatField(max_length='length')
elif fieldType == "int": attrs[x]=models.IntegerField()
elif fieldType == "text": attrs[x]=models.TextField()
else: print "AW PROB in exptDB---------------",x,y["type"],y["length"]
myModel = type(str(table_name), (models.Model,), attrs)
return myModel
def getColumns(expt_id):
cursor = connection.cursor()
cursor.execute("desc %s;" % (expt_id))
exptInfo = str(cursor.fetchall())[1:-1]
myList= exptInfo.split("""(u'""")
myColumns = {}
for item in myList:
mySplit = item.replace("u'","").replace("'","").replace(" ","").split(",")
if len(mySplit)>=2:
subSplit=mySplit[1].split("(")
if len(subSplit)>=1:
subSplit.append('999')#does not latter.
myColumns[mySplit[0]]={"type":subSplit[0],"length":subSplit[1].replace(")","")}
return myColumns
答案 0 :(得分:0)
您想使用inspectdb
命令。它专为这种情况而设计。
但是,您无需查看inspectdb
代码,只需阅读专门针对此问题的以下页面:https://docs.djangoproject.com/en/dev/howto/legacy-databases/