21

空のデータベースが存在しない場合に初期化するPythonスクリプトを作成しました。

import os

if not os.path.exists('Database'):
    os.makedirs('Database')
    os.system('sqlite3 Database/testDB.db ";"')

# rest of the script...

try-exceptを使用して、よりPythonの方法でこれを行うことはできますか、それともこの種のコードは受け入れられますか?

4

4 に答える 4

41

私はあなたがこのようにそれを行うことができると思います:

import sqlite3
conn = sqlite3.connect('Database/testDB.db')

これにより、データベースに接続し、データベースが存在しない場合に備えてデータベースを作成する必要があります。これが最もPython的な方法かどうかはわかりませんがsqlite3、コマンドの代わりにモジュールを使用しますsqlite3

于 2012-07-22T10:05:05.850 に答える
6

Pythonicにする:存在しない場合はsqlite3データベースを作成しますか?

これを行う最もPythonの方法は、コンテキストマネージャーを使用することです。

import sqlite3

# if we error, we rollback automatically, else commit!
with sqlite3.connect('/Temp/testDB.db') as conn:
    cursor = conn.cursor()
    cursor.execute('SELECT SQLITE_VERSION()')
    data = cursor.fetchone()
    print('SQLite version:', data)

Pythonシェルでは、これは私にエコーします:

<sqlite3.Cursor object at 0x0CCAD4D0>
SQLite version: (u'3.5.9',)

プラットフォーム間で機能する一時ファイルパスがあることを確認するには、次を使用しますtempfile.gettempdir

import tempfile
with sqlite3.connect(tempfile.gettempdir() + '/testDB.db') as conn:
    ...
于 2014-12-04T15:42:07.203 に答える
6

ディレクトリパス、データベースファイル、およびテーブルを作成します

必要に応じて、ディレクトリパス、データベースファイル、およびテーブルを作成するためのレシピを次に示します。これらがすでに存在する場合、スクリプトは何も上書きせず、手元にあるものを使用するだけです。

import os
import sqlite3

data_path = './really/deep/data/path/'
filename = 'whatever'

os.makedirs(data_path, exist_ok=True)

db = sqlite3.connect(data_path + filename + '.sqlite3')
db.execute('CREATE TABLE IF NOT EXISTS TableName (id INTEGER PRIMARY KEY, quantity INTEGER)')
db.close()
于 2017-07-18T12:04:51.800 に答える
4

sqlite3.connectデータベースが存在しない場合はデータベースの作成を試みます。データベースが存在するかどうかを確認する唯一の方法は、データベースを開いてをキャッチすることIOErrorです。次に、空のデータベースを作成するには、sqlite3モジュールを使用して接続するだけです。

import sqlite3

try:
    open('idonotexist')
    print 'Database already exists!'
except IOError as e:
    if e.args == 2: # No such file or directory
        blank_db = sqlite3.connect('idontexist')
        print 'Blank database created'
    else: # permission denied or something else?
        print e

もちろん、os.makedirs構造がすでに存在するかどうかによっては、まだ何かをしなければならない場合があります。

于 2012-07-22T10:10:28.943 に答える