1

以前は不明だった既存のテーブルのモデルを作成する必要があります。他の人が言っていた

コードを出力する代わりに、 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
4

1 に答える 1

0

inspectdbコマンドを使用したい。この種の状況のた​​めに正確に設計されています。

ただし、コードを見る必要はありませんinspectdb。この問題に特化した次のページを読んでください: https://docs.djangoproject.com/en/dev/howto/legacy-databases/

于 2013-01-20T16:45:48.030 に答える