質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

0回答

147閲覧

WebアプリケーションでDBのレコードを更新したい

mok__

総合スコア0

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2024/11/05 07:53

実現したいこと

WebアプリケーションでDBのレコードを更新したいです。
具体的には、フォームから送信された値を使ってUPDATE文でDBを更新する処理を実装しています。

発生している問題・分からないこと

更新ボタンを押すと以下のエラーが発生し、更新できません:
Error message: type object 'datetime.datetime' has no attribute 'datetime'

該当のソースコード

python

1import os 2import json 3import logging 4import traceback 5import psycopg2 6import datetime 7from configparser import ConfigParser 8from urllib.parse import parse_qs 9import decimal 10 11def update_order_data(data): 12 """データを更新する""" 13 conn = None 14 cur = None 15 try: 16 # 日付形式の変換(YYYYMMDDをYYYY-MM-DDに変換) 17 if 'date' in data and len(data['date']) == 8: 18 formatted_date = f"{data['date'][:4]}-{data['date'][4:6]}-{data['date'][6:]}" 19 data['date'] = formatted_date 20 21 # データ型のバリデーション 22 required_fields = ['date', 'type', 'val1', 'val2', 'val3', 'val4'] 23 for field in required_fields: 24 if field not in data: 25 return { 26 'status': 'error', 27 'message': f'必須フィールドが不足: {field}' 28 } 29 30 try: 31 # 数値フィールドの検証 32 numeric_fields = ['val1', 'val2', 'val3', 'val4'] 33 for field in numeric_fields: 34 if not str(data[field]).isdigit(): 35 return { 36 'status': 'error', 37 'message': f'{field}は数値が必要です' 38 } 39 40 # データベース接続処理は省略... 41 42 # SQL文の作成 43 update_sql = """ 44 UPDATE sample_table 45 SET 46 column1 = %s, 47 column2 = %s, 48 column3 = %s, 49 column4 = %s, 50 updated_date = %s, 51 updated_by = %s, 52 updated_prg_nm = %s, 53 modify_count = modify_count + 1 54 WHERE date_column = %s AND type_column = %s 55 """ 56 57 logger.debug("=== SQL Query Details ===") 58 logger.debug("SQL Query:") 59 logger.debug(update_sql) 60 61 # このあたりでエラー発生 62 current_date = datetime.strftime('%Y%m%d') 63 64 # パラメータの設定 65 params = ( 66 int(data['val1']), 67 int(data['val2']), 68 int(data['val3']), 69 int(data['val4']), 70 current_date, 71 'system', 72 'sample.py', 73 data['date'], 74 data['type'] 75 ) 76 77 # SQLパラメータのログ出力 78 logger.debug("=== Parameters Details ===") 79 logger.debug("Number of parameters: {}".format(len(params))) 80 for i, param in enumerate(params): 81 logger.debug(f"Parameter {i+1}: {param} (Type: {type(param)})") 82 83 # SQL実行 84 cur.execute(update_sql, params) 85 affected_rows = cur.rowcount 86 conn.commit() 87 88 if affected_rows == 0: 89 return { 90 'status': 'error', 91 'message': '更新対象のデータが見つかりません' 92 } 93 94 return { 95 'status': 'success', 96 'message': '更新が完了しました' 97 } 98 99 except Exception as e: 100 if conn: 101 conn.rollback() 102 logger.error(f"Error: {str(e)}") 103 return { 104 'status': 'error', 105 'message': f'エラーが発生: {str(e)}' 106 } 107 108 finally: 109 if cur: 110 cur.close() 111 if conn: 112 conn.close()

Javascript

1async function handleSubmit(event) { 2 event.preventDefault(); 3 console.log('Form submission started'); 4 5 try { 6 const formData = { 7 date: document.getElementById('date-input').value.replace(/\//g, ''), 8 type: getSelectedType(), 9 val1: document.getElementById('value1').value, 10 val2: document.getElementById('value2').value, 11 val3: document.getElementById('value3').value, 12 val4: document.getElementById('value4').value 13 }; 14 15 console.log('Form data:', formData); 16 17 if (!validateFormData(formData)) { 18 return; 19 } 20 21 const response = await fetch('/api/update', { 22 method: 'POST', 23 headers: { 24 'Content-Type': 'application/json' 25 }, 26 body: JSON.stringify(formData) 27 }); 28 29 const result = await response.json(); 30 if (result.status === 'success') { 31 showSuccessModal(formData); 32 } else { 33 throw new Error(result.message); 34 } 35 36 } catch (error) { 37 console.error('Error:', error); 38 showError(error.message || '更新に失敗しました'); 39 } 40} 41 42function validateFormData(formData) { 43 // バリデーション処理は省略 44 return true; 45}

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

以下に修正してみたが、エラーは解消されなかった。
from datetime import datetime
current_date = datetime.now().strftime('%Y%m%d')

補足

Python 3.9
PostgreSQL 13

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2024/11/05 09:38

> 更新ボタンを押すと以下のエラーが発生し、更新できません: > Error message: type object 'datetime.datetime' has no attribute 'datetime' 例外処理を一時的に外してエラー発生個所を特定するのが良いかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問