Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana menangani sebagian tanggal (2010-00-00) dari MySQL di Django?

Pertama, terima kasih atas semua jawaban Anda. Tak satu pun dari mereka, sebagaimana adanya, adalah solusi yang baik untuk masalah saya, tetapi, untuk pembelaan Anda, saya harus menambahkan bahwa saya tidak memberikan semua persyaratan. Tetapi masing-masing membantu saya memikirkan masalah saya dan beberapa ide Anda adalah bagian dari solusi akhir saya.

Jadi solusi terakhir saya, di sisi DB, adalah menggunakan varchar (dibatasi hingga 10 karakter) dan menyimpan tanggal di dalamnya, sebagai string, dalam format ISO (YYYY-MM-DD) dengan 00 untuk bulan dan hari ketika tidak ada bulan dan/atau hari (seperti tanggal lapangan di MySQL). Dengan cara ini, bidang ini dapat bekerja dengan basis data apa pun, data dapat dibaca, dipahami, dan diedit secara langsung dan mudah oleh manusia menggunakan klien sederhana (seperti klien mysql, phpmyadmin, dll.). Itu adalah persyaratan. Itu juga dapat diekspor ke Excel/CSV tanpa konversi apa pun, dll. Kerugiannya adalah formatnya tidak ditegakkan (kecuali di Django). Seseorang bisa menulis 'bukan kencan' atau melakukan kesalahan dalam format dan DB akan menerimanya (jika Anda memiliki gagasan tentang masalah ini...).

Dengan cara ini juga memungkinkan untuk melakukan semua khusus kueri tanggal lapangan dengan relatif mudah. Untuk kueri dengan WHERE:<,>, <=,>=dan =bekerja secara langsung. Kueri IN dan BETWEEN juga berfungsi secara langsung. Untuk query berdasarkan hari atau bulan Anda hanya perlu melakukannya dengan EKSTRAK (HARI|BULAN ...). Memesan pekerjaan juga secara langsung. Jadi saya pikir ini mencakup semua kebutuhan kueri dan sebagian besar tanpa komplikasi.

Di sisi Django, saya melakukan 2 hal. Pertama, saya telah membuat PartialDate objek yang sebagian besar terlihat seperti datetime.date tetapi tanggal pendukung tanpa bulan dan/atau hari. Di dalam objek ini saya menggunakan objek datetime.datetime untuk menyimpan tanggal. Saya menggunakan jam dan menit sebagai tanda yang memberi tahu apakah bulan dan hari valid jika disetel ke 1. Idenya sama dengan steveha mengusulkan tetapi dengan implementasi yang berbeda (dan hanya di sisi klien). Menggunakan datetime.datetime object memberi saya banyak fitur bagus untuk bekerja dengan tanggal (validasi, perbandingan, dll.).

Kedua, saya telah membuat PartialDateField yang sebagian besar berhubungan dengan konversi antara PartialDate objek dan database.

Sejauh ini, ini bekerja dengan cukup baik (sebagian besar saya telah menyelesaikan tes unit ekstensif saya).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Banyak database dan transaksi

  2. jarak hamming mysql antara dua phash

  3. MySQL DROP DATABASE

  4. Menyiapkan MySQL InnoDB Cluster dengan MySQL Shell (plus MySQL Router)

  5. Buat tabel gagal dengan Batasan Kunci Asing salah Dibentuk