2017-06-12 12 views
0

ローカルマシンと開発マシンにそれぞれSQLiteとMySQLがインストールされています。 Django-MySQLはqueryset extraでmodel.columnを認識できませんか?

select_single = {'date': "strftime('%%Y-%%m-%%d',projectName_Modelname.created)"} 
queryset.extra(select=select_single) 

しかし strftimeは、MySQL( link)では動作しませんので、あまりにも与えられたリンクやその他の場所で提案されているように、私は DATE_FORMAT()を使用してみました次は、(SQLiteのと)私のローカルマシン上で正常に動作しています。 は今けど、私は以下を実行する場合:

select_single = {'date': "DATE_FORMAT(projectName_Modelname.created, '%%Y-%%m-%%d')"} 
queryset.extra(select=select_single) 

次のエラーが来る: '作成'

DatabaseError: (1054, "Unknown column 'projectName_Modelname.created' in 'field list'") 

は、Djangoのモデルアプリの 'MODELNAME' 'プロジェクト名'

デバッグに日時フィールドですprojectName_Modelname.createdNOW()に置き換えてもエラーは発生しません。私もprojectName_Modelname.createdの代わりにModelname.createdを試してみましたが、何のメリットはありませんか?

注:

date_raw_query = {'date': "date_format(created, '%%Y-%%m-%%d')"}

してからで働く希望

queryset.extra(select=date_raw_query)

を試してみてください。私はDjango1.5.5

+3

Django 1.5.5は何年も時代遅れです。誰も今は余分なものを使用する方法を覚えていませんが、常にこの問題を避けるために、ローカルとプロダクションで同じRDBMSを使用しようとします。 – e4c5

+0

そして、なぜこれをやりたいのか説明できますか? Pythonまたはテンプレートのどちらかで出力時に日付を書式設定するほうがはるかに簡単です。 –

+0

@ e4c5これは私が維持しているプロジェクトに関するものであり、いくつかの変更が要求されました。 – Sid

答えて

1

を使用しています、私はそれのようなものであるべきだと思いますセットアップ。私はこれをDjango 1.7とMySQLで試してみたところ、動作しているようです。

また、SQLエラーが発生した場合は、いつでも間違っている可能性があることを確認するためにprint queryset.extra(select=date_raw_query).queryを実行することができます。

そして、それはこのようなSQLiteのとMySQLの間で互換性のあるコードを書くことになると、カスタムのMySQL関数を書くことがhere

を示唆されている。しかし、私はそうでないことをお勧め。ローカルでMySQLをセットアップした場合と同様の開発環境を持ち、できるだけ早くDjangoをアップグレードする方が良いでしょう。 :P

+1

提案を試してみると、DatabaseError:(1052、 "フィールドリストに列が作成されました"が曖昧です) 'が表示されていました。 MySQLのクエリを分析すると、modelnameはすべて小文字に変更されましたが、projectnameは(projectName_modelnameのように)camelcaseだったことがわかりました。したがって、私はそれを 'projectName_modelname.created'に変更しました。ありがとう。 – Sid

関連する問題