以前は不明だった既存のテーブルのモデルを作成する必要があります。他の人が言っていた
コードを出力する代わりに、 inspectdbコードを見て、クラスを返すことができます。
しかし、Pythonの初心者にとって、私は困難を抱えています。これを行う方法について、より具体的な例を誰かが提供できますか? どうもありがとう。
更新: 私はこれを調査しています。有望に見えます。動的モデルを作成するためのいくつかのオプションがあるようですが、その中には mySQL 以外のデータベースが必要なものもあります (このstackoverflow Q を参照)
UPDATE2: 以下の関数を使用して、実行時に未知の mysql テーブルのモデルを作成できるようになりました。ただし、モデルにクエリを実行しようとすると、「table1」というテーブルに対して「テーブル「djangodb.subscription_table1」が存在しません」というメッセージが表示されます)。「table1」の名前を「subscription_table1」に変更すると、「テーブル「djangodb.subscription_subscription_tb2f1e1e47d73417ab2b187bc4a08bf57」が存在しません」というエラーが表示されます。
ヘルプ!
最終更新: 特定の問題に対する別の解決策を使用しました: 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