制作Pythonic:创建一个sqlite3数据库,如果它不存在?

yay*_*ayu 11 python sqlite

我编写了一个Python脚本,如果它不存在则初始化一个空数据库.

import os

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

# rest of the script...
Run Code Online (Sandbox Code Playgroud)

我可以用更多的Pythonic方式,尝试 - 除外,还是这种代码可以接受?

zen*_*poy 31

我想你可以这样做:

import sqlite3
conn = sqlite3.connect('Database/testDB.db')
Run Code Online (Sandbox Code Playgroud)

这应该连接到您的数据库并在它不存在的情况下创建它.我不确定这是最pythonic方式,但它确实使用sqlite3模块而不是sqlite3命令.

  • 请注意,只要父目录存在,sqlite3.connect就会创建db文件. (4认同)

Aar*_*all 6

制作Pythonic:创建一个sqlite3数据库,如果它不存在?

Pythonic的方法是使用上下文管理器:

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)
Run Code Online (Sandbox Code Playgroud)

在python shell中,这对我来说是响应:

<sqlite3.Cursor object at 0x0CCAD4D0>
SQLite version: (u'3.5.9',)
Run Code Online (Sandbox Code Playgroud)

要确保您具有跨平台工作的临时文件路径,请使用tempfile.gettempdir:

import tempfile
with sqlite3.connect(tempfile.gettempdir() + '/testDB.db') as conn:
    ...
Run Code Online (Sandbox Code Playgroud)


Ser*_*ndt 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()
Run Code Online (Sandbox Code Playgroud)