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

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

ただいまの
回答率

90.34%

  • Python 3.x

    7354questions

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

  • SQL

    2540questions

    SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

pythonでsqlの書き方について

解決済

回答 3

投稿 編集

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

megune

score 6

 前提・実現したいこと

プログラミング初心者です。
pythonでsqlのデータと変数の中身を複数比較したいのですがSyntaxErroで動きません。
どのような書き方をすれば良いのでしょうか?

 発生している問題・エラーメッセージ

SyntaxError: invalid syntax

 該当のソースコード

sql = "SELECT * FROM table1 WHERE FLG = 0 AND mail_ad = '%s'" % address " AND mail_date < '%d'" % newdate
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • Orlofsky

    2018/07/05 14:29

    table1の CREATE TABLE文を https://teratail.com/help#about-markdown の[コードを入力]を使って載せると適切なコメントが付き易いです。

    キャンセル

  • mts10806

    2018/07/05 15:36

    質問編集画面タイトル横にある「初心者アイコン」をご活用ください。「初心者」と質問で書くよりも伝わりますし、質問一覧に表示されるのでわかりやすくなります。

    キャンセル

回答 3

checkベストアンサー

+1

データベースがわからないので、MySQLと仮定して回答します。
質問文にはデータベース、使用ドライバを書いてくださいな。

sql = "SELECT * FROM table1 WHERE FLG = 0 AND mail_ad = '%s'" % address " AND mail_date < '%d'" % newdate

1,SQLインジェクションを防止するためにSQLを文字列連結するのではなく、プレースホルダを使用してくださいな。

sql = 'SELECT * FROM table1 WHERE FLG = 0 AND mail_ad = %s AND mail_date < %s'
cursor.execute(sql, (address, int(newdate)))


◇参考情報
MySQL Connector/PythonからSQLを投げる

2,ORDER BY句を指定しない時SELECT文は結果順序を保証しません。
ORDER BYはできるだけ付けてくださいな。

3,データベースやカーソルのclose忘れを防ぐためにcontextlib#closingを使用してくださいな。

データベース:MySQL
ドライバ:mysql.connector
のサンプルコードです、ご参考まで。

# -*- coding: utf-8 -*-
from mysql.connector import connect
from contextlib import closing

def main() -> None:
    config = {
        'host': '127.0.0.1',
        'database': 'XXXXXXX',
        'user': 'XXXXXX',
        'password': 'XXXXXX',
        'charset' : 'utf8'
    }
    with closing(connect(**config)) as conn:
        with closing(conn.cursor()) as cursor:
            address = "bbbbbbbbb"
            newdate = 20180706
            sql = 'SELECT * FROM table1 WHERE FLG = 0 AND mail_ad = %s AND mail_date < %s'
            cursor.execute(sql, (address, newdate))
            for row in cursor.fetchall():
                print(row)

if __name__ == "__main__":
    main()

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

%記法を使っているようですが、もっと詳しく使い方を調べてください。

https://qiita.com/takahiro_itazuri/items/e585b46d096036bc837f

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/07/05 15:06

    すみません。よくわからず使っておりました。
    mail_dateとnewdateには8桁の数字が入っております。
    どのように記述すればよいのでしょうか?

    キャンセル

  • 2018/07/05 15:08

    えっと、 mail_date って質問内容にはないんですが、どこから来たんですか?
    サンプルとしてaddress, newdateの具体的な値を決めて、あなたの欲しいSQL文(完成形)を具体的に書いてください。
    これらの情報がないと答えられません。

    キャンセル

0

SQLをロクに勉強しないでプログラムがまともに動作しないのに納品して、当然なことですが、お客様に納品を拒否される開発会社もあります。まず、SQL(今回はSELECT文)を実行してエラーにならないかを確認してからPythonに組み込みましょう。
SQLの中で使っているテーブルはCREATE TABLEが必要です。参考

同じSQLでも方言が大きいですから、どのデータベースを使うのかをタグで明示した方が適切なコメントが付き易いです。
SQLの観点から Oracle Database, PostgreSQL, MySQL の特徴を整理しよう!

データベースによっても直接SQLを実行する方法が違います。様々なDBでSQLをバッチ実行するには

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

  • Python 3.x

    7354questions

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

  • SQL

    2540questions

    SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。