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

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

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

6011閲覧

[MySQLdb] INSERT文を記述し、connect.commit()をしたあとに、 当該レコードのidを取得することはできないのでしょうか?

qaz3330

総合スコア113

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2016/07/04 13:37

MySQLdbで、INSERTを記述し、connect.commit()をしたあとに、
当該レコードのidを取得することはできないのでしょうか?

例としてこういうSQL文があったとします。

cursor.execute("insert into users (name) values ('hoge')") user_id = connect.commit() print user_id #nil

このcommitの前後などで、userのレコードを返り値として取得できないのでしょうか?

現在はやむおえず、INSERTしたあとに、SELECT文で、該当のuser_idを取得しております。

普段はRubyonRailsで開発しており、ActiveRecordだと、そういうのもできるのにな、と思い、
pythonでもできないのかなと質問しました。

よろしくお願いします。

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

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

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

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

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

guest

回答1

0

last_insert_id()で参照できませんか?

select last_insert_id();

投稿2016/07/04 14:34

yambejp

総合スコア114839

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

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

qaz3330

2016/07/04 14:40

ご回答ありがとうございます。 last_insert_idで参照できました。ちなみに、INSERT文の返り値としてidを取得するというのはそもそも無理でしょうか。。。 last_insert_idを使用する場合 INSERT文とSELECT文が走るため、INSERT文だけで抑えたいなと思ってます。 今後、データ量が増えている処理をするため、いずれ、ここがネックになるかなと思い。
KiyoshiMotoki

2016/07/04 15:29 編集

横から失礼します。 qaz3330様 > last_insert_idを使用する場合 > INSERT文とSELECT文が走るため、INSERT文だけで抑えたいなと思ってます。 > 今後、データ量が増えている処理をするため、いずれ、ここがネックになるかなと思い。 おそらく、データ量の増加によって select last_insert_id(); がネックになることは無いと思います。 last_insert_id 関数は「情報関数」とよばれるもので、 その性質上、この関数を呼び出してもテーブル内のデータをスキャンすることは無いはずだからです。 https://dev.mysql.com/doc/refman/5.6/ja/information-functions.html マニュアルのlast_insert_id に関する記述からも、そのように推測できます。 https://dev.mysql.com/doc/refman/5.6/ja/information-functions.html#function_last-insert-id > 生成された ID は、接続ごとにサーバー内に保持されます。 > つまり、関数(last_insert_id のこと)によって指定されたクライアントに返された値は、 > そのクライアントによって AUTO_INCREMENT カラムに影響を与える最近のステートメント用に最初に生成された AUTO_INCREMENT 値です。 > この値は、ほかのクライアントが独自の AUTO_INCREMENT 値を生成した場合でも影響を受ける可能性はありません。
yambejp

2016/07/05 01:07

そもそもINSERT文は出力がないので参照のしようが無いと思います どうしても2文発行するのがいやなら、プロシージャなどで まとめてしまうとか検討ください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問