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

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

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

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Python

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

Q&A

解決済

2回答

5128閲覧

【Python】SQLiteでテーブル名に変数を使いたい

netz-eng

総合スコア105

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Python

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

0グッド

0クリップ

投稿2020/09/06 07:14

前提・実現したいこと

SQLiteを使ってデータベース作成の勉強をしています。
データベースのテーブル名に変数を用いたいのですが、元々そういう仕様ではないようで中々難航しています。

↓ こちらのサイトを参考にコードを打ってみましたが、どうしても思ったように動かないため質問いたしました。
https://qiita.com/heat_exchange/items/1864f4511e15f83eecef

変数tablenameに格納した文字列のテーブルを作りたいのですが、下記コードのように書くと、「table_info」というテーブルが作成され、その下にデータ型の指定されていない列名(tablenameに格納された"DDD")が作成されました。

テーブル名tablenameが存在するときは一旦削除(DROP)、なけらば作成(CREATE)という内容を実現するには、どうすればよいでしょうか?

該当のソースコード

import sqlite3 as sq conn = sq.connect(r"C:\~~~\sample_data.db") cursor = conn.cursor() tablename = "DDD" # テーブル操作 # テーブル名があるとき、ないときの分岐 cursor.execute("DROP TABLE IF EXISTS %s" % tablename) cursor.execute("CREATE TABLE IF NOT EXISTS table_info('%s')" % tablename) # <-- 該当箇所 conn.commit() conn.close()

補足情報(FW/ツールのバージョンなど)

Windows10
sqlite 3.32.3

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

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

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

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

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

guest

回答2

0

ベストアンサー

手元の環境では以下でうごきました。
質問中のSQLだと、CREATE TABLE時の列が一つも指定されていなかったので、とりあえずこちらで適当な定義を追加しています。

python

1import sqlite3 as sq 2 3conn = sq.connect(r"sample_data.db") 4cursor = conn.cursor() 5tablename = "DDD" 6 7 8# テーブル操作 9# テーブル名があるとき、ないときの分岐 10cursor.execute("DROP TABLE IF EXISTS %s" % tablename) 11cursor.execute("CREATE TABLE IF NOT EXISTS %s (test text)" % tablename) # <-- 該当箇所 12 13conn.commit() 14conn.close()

投稿2020/09/06 08:47

編集2020/09/06 08:49
YakumoSaki

総合スコア2027

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

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

netz-eng

2020/09/06 13:32

ご回答ありがとうございます。 載せてくださった書き方で試したところ、無事「DDD」という名前のテーブルを作ることができました! 加筆いただいた通り、列を指定していなかったのが原因のようです。 諦めかけていたため、本当に助かりました。 重ね重ね、ありがとうございました!
guest

0

SQLiteに限らず、データベースにはCREATE TABLE, DROP TABLE などを含むSQLを実行できるユーティリティを持っていますし、便利なツールも使える場合もあります。
テーブル毎にカラムの列数、列名、データ型、桁数、制約、PRIMARY KEYなどが違いので、通常はいちいちPythonでプログラムを書いたりしません。

投稿2020/09/06 07:30

Orlofsky

総合スコア16415

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

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

netz-eng

2020/09/06 08:26

ご回答ありがとうございます。 最終的にはtkinterによるGUIアプリに組み込んで、私用の辞書アプリのようなものを作りたいと考えているので、Pythonでフレキシブルに扱えないかと試行錯誤している次第です。 テーブル名を単語名にし、各列にその意味やカテゴリタグ(複数のタグを同列の複数行にまたがって格納)を格納する――という内容を実現したいのですが…… もしよろしければ、sqliteに変数を導入する方法か、もしくは上のようなデータベースを扱うGUIアプリのために何を導入すべきか教えていただけると嬉しいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問