2017-01-17 23 views
1

私は現在、Webデザインのコースをやっています。私がしたいのは、データベースにportafolioという名前のテーブルが存在するかどうかをチェックすることです。作成しない場合は、テーブルを作成します。 私はPython(フラスコ)とsqlite3を使って自分のデータベースを管理しています。 これまでのところ、それが存在しない場合は、テーブルを作成するためのSQLのロジックの私はいくつか:テーブルがPythonに存在するかどうかを確認するには?

# db is my database variable 
db.execute('''create table if not exists portafolio(id INTEGER PRIMARY KEY AUTOINCREMENT, 
               stock TEXT, 
               shares INTEGER, 
               price FLOAT(2), 
               date TEXT 
              '''); 

しかし、その代わりに私はまったく同じチェックを行うだろう方法を知っている私が好きなSQLコマンドを使用します代わりにPythonを使用してください。

ご協力いただければ幸いです。

答えて

1

わからないどの方法がきれいですが、簡単な選択を発行し、例外処理することができます:

try: 
    cursor.execute("SELECT 1 FROM portafolio LIMIT 1;") 
    exists = True 
except sqlite3.OperationalError as e: 
    message = e.args[0] 
    if message.startswith("no such table"): 
     print("Table 'portafolio' does not exist") 
     exists = False 
    else: 
     raise 

注我々はそれがあるOperationalErrorの種類を確認する必要がここにと、私たちはこれを持っている必要がありますthere is currently no way to get the actual error codeのため、文字列チェックの "not pretty"メッセージ部分文字列。

それとも、もっとSQLite specific approach

table_name = "portafolio" 
cursor.execute(""" 
    SELECT name 
    FROM sqlite_master 
    WHERE type='table' AND name=?; 
""", (table_name,)) 

exists = bool(cursor.fetchone()) 
+2

例外ソリューションのためのnit。テーブルが存在するため、理由が* not *であれば 'OperationalError'が発生する可能性があります。たとえば、クエリに構文上の問題があり、それでも 'OperationalError'としての資格があります。あなたは* why *を正確に把握するために、より具体的な例外に少し深く潜り込む必要があります。 – idjaw

+1

@ idjawええ、良い点は、これについて考えていた、私は実際のエラーコードを取得できるかどうかを確認します。ありがとう。 – alecxe

+0

OPの 'db'変数と同じ' cursor'が簡単な質問でしょうか?それとも別の機能ですか(もしあれば、それに付属のモジュールをインポートする必要がありますか?) – tadm123

0

あなたは、データベース操作できちんと仕事を探しているなら、私はあなたがORM(オブジェクト関係モデル)の詳細についてアドバイス。

私はフラスコをSQLAlchemyで使用します。 Pythonクラスを使用すると、次のようなSQL操作を管理できます。

class Portafolio(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    stock = db.Column(db.String(255), unique=True) 
    shares = db.Column(db.Integer, unique=True) 

すべてのデータベースのチェックとマイグレーションは簡単です。

+0

ええ、私はそれについて少し知っていますが、それはずっと簡単ですが、私が行っているオンラインコースは、あなたがSQLでそれをやっていることを伝えています。 – tadm123

関連する問題