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

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

ただいまの
回答率

88.78%

チェックボックス がDBに繋がらない(flask,sql,html)

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 383

Shmupeiii

score 11

コード
今サイトを制作していて、
下記のコードは
condition checkbox kazi BABY pet に
それぞれチェックボックス を入れて(kazi BABY petは複数選択可能)
その選んだチェックボックス を
SQL(DB)に入れるということをしたいです。

しかしこの状態でやると

sqlite3.OperationalError
sqlite3.OperationalError: near ".": syntax error

Traceback (most recent call last)
File "C:\Users\tsaru\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 2463, in call
return self.wsgi_app(environ, start_response)
File "C:\Users\tsaru\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 2449, in wsgi_app
response = self.handle_exception(e)
File "C:\Users\tsaru\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 1866, in handle_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\tsaru\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\_compat.py", line 39, in reraise
raise value
File "C:\Users\tsaru\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 2446, in wsgi_app
response = self.full_dispatch_request()
File "C:\Users\tsaru\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 1951, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\Users\tsaru\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 1820, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\tsaru\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\_compat.py", line 39, in reraise
raise value
File "C:\Users\tsaru\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 1949, in full_dispatch_request
rv = self.dispatch_request()
File "C:\Users\tsaru\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 1935, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "C:\Users\tsaru\Desktop\omoiyari.new\app.py", line 31, in add
(condition, checkbox, kazi, BABY, pet, makedinner))
sqlite3.OperationalError: near ".": syntax error

とエラーが出ました。
どうしたらチェックボックス にデータを入れれるでしょうか
よろしくお願いします。

SQL

名前 select_checkbox カラム名 id condition checkbox kazi BABY pet makedinner
の順で配置

<form action="/add" method="POST">

        <input type="checkbox" name="condition" value="tired">疲れている
        <input type="checkbox" name="condition" value="sleep">寝不足
        <input type="checkbox" name="condition" value="poor">体調不良


        <p>ご飯はどうしますか?</p>

        <input type="checkbox" name="checkbox" value="morning"><input type="checkbox" name="checkbox" value="lunch"><input type="checkbox" name="checkbox" value="night"><input type="checkbox" name="checkbox" value="lunch_box">お弁当
        <!--<p>使ってほしい食材ありますか?</p>
        <form action="checkbox.html" method="POST"> 
        <input name="food"/> 
        <input type="text" name="food" placeholder="コメント入力">
        <br>-->

        <p>家事リスト(複数選択可)</p>

        <select name="kazi" id="" multiple>
          <option value="1">皿洗い</option>
          <option value="2">お皿をしまう</option>
          <option value="3">洗濯物を洗う</option>
          <option value="4">洗濯物を干す</option>
          <option value="5">アイロンがけ</option>
          <option value="6">服を畳む</option>
          <option value="7">服を収納する</option>
          <option value="8">部屋掃除</option>
          <option value="9">お風呂掃除</option>
          <option value="10">トイレ掃除</option>
          <option value="11">ゴミを集める</option>
          <option value="12">ゴミ捨て</option>


        </select>

        <p>赤ちゃんリスト(複数選択可)</p>

        <select name="BABY" id="" multiple>
          <option value="1">おむつ替え</option>
          <option value="2">ミルク</option>
          <option value="3">哺乳瓶の消毒</option>
          <option value="4">子供のご飯作り</option>
          <option value="5">ご飯を食べさせる</option>
          <option value="6">お風呂</option>
          <option value="7">着替え</option>
          <option value="8">泣いたらあやす</option>
          <option value="9">寝かし付け</option>
          <option value="10">一緒に遊ぶ(室内)</option>
          <option value="11">一緒にお出かけ</option>
          <option value="12">保育園の送り迎え</option>
          <option value="13">病院に連れて行く</option>


        </select>
        <p>ペットリスト(複数選択可)</p>

        <select name="pet" id="" multiple>
          <option value="1">ペットの散歩</option>
          <option value="2">ペットのご飯</option>
          <option value="3">ペットと室内で遊ぶ</option>
          <option value="4">ペットのトイレ掃除</option>
          <option value="5">ペットの病院</option>


        </select>
        <div>
          <input type="submit" value="送信">


        </div>
      </form>
    </div>
  </div>

 

flask 1-5行目
from email.mime.text import MIMEText
import ssl
import smtplib
import sqlite3
import random
from flask import Flask, render_template, request, redirect, session

flask(該当部分)

@app.route('/add', methods=["POST"])
def add():
    # roomid = session['roomid']
    # フォームから入力されたアイテム名の取得
    condition = request.form.get("condition")
    checkbox = request.form.get("checkbox")
    kazi = request.form.get("kazi")
    BABY = request.form.get("BABY")
    pet = request.form.get("pet")
    makedinner = request.form.get("makedinner")
    conn = sqlite3.connect('omoiyari.db')
    c = conn.cursor()
    c.execute("insert into bbs values(null,?,?,?,?.?,?)",
                (condition, checkbox, kazi, BABY, pet, makedinner))
    conn.commit()
    conn.close()

    return redirect('/bbshome')
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Orlofsky

    2020/03/04 12:25

    最初に書いたようにエラーメッセージも Markdown を使ってください。

    キャンセル

  • Orlofsky

    2020/03/04 12:25

    [SQLite]タグを追加してください。

    キャンセル

  • Orlofsky

    2020/03/04 12:26

    質問に CREATE TABLE も Markdown で追記してください。

    キャンセル

回答 1

checkベストアンサー

+2

一応現象が再現したので、たぶんここというのを指摘します。

以下の部分が「.」です。

    c.execute("insert into bbs values(null,?,?,?,?.?,?)",
                                                  ^

元のままだとエラーの理由ががわからなかったので、以下の通り変更して実行したところデータが入りました。(create tableは別途しています)
たぶん望んだデータではないと思いますが、そこは頑張って作成ください。

    sql = "insert into bbs values(null,?,?,?,?,?,?)"
    master = (condition, checkbox, kazi, BABY, pet, makedinner)
    conn.execute(sql, master)

今後は、現象が再現する最小限のコードをコピー&ペーストできる形で提示ください。

例えば、

    return redirect('/bbshome')


というのがありますが、/bbshomeに該当するコードは提供されていません。
また、formのHTMLが提示されていますが呼び出される部分はありませんし、完全なHTMLではないので補完が必要でした。
エラーメッセージもcodeで囲まれていないため非常に見づらいです。

また、Orlofskyさんが指摘していますが、この質問で使われているDBはsqlite3です。
SQL Serverは使われていません。
変更しましたというコメントがついていますが、「SQL Server」タグはそのままです。
今回の質問に回答するのに必要なのはsqlite3に詳しい人です。適切なタグ設定をお願いします。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/03/04 13:37

    質問が修正されているようなので一応コメント追加しますが、「.」を修正したらそのコードは動作するはずです。
    その後はこの質問文にあるエラーは発生しません。
    コードを修正して確認し、エラーが出なくなったらこの質問を閉めてください。
    改めてわからないことがあったら質問し直してください。この質問をだらだら追記しても訳がわからなくなるだけです。

    キャンセル

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

  • ただいまの回答率 88.78%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る