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

时间:2012-07-22 09:53:27

标签: python sqlite

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

import os

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

# rest of the script...

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

4 个答案:

答案 0 :(得分:31)

我认为你可以这样做:

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

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

答案 1 :(得分: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)

在python shell中,这回事给我:

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

要确保您拥有适用于跨平台的临时文件路径,请使用tempfile.gettempdir

import tempfile
with sqlite3.connect(tempfile.gettempdir() + '/testDB.db') as conn:
    ...

答案 2 :(得分:3)

创建目录路径,数据库文件和表

这是创建目录路径,数据库文件和表的方法 必要时。如果这些已经存在,脚本将不会覆盖任何内容,只需使用手头的内容即可。

<asp:DropDownList ID="ddl" runat="server" visible="false" CssClass="form_txt2 colegas"></asp:DropDownList>

ddl.Items.Clear()
ddl.Items.Add(New ListItem("Select something", "0"))
ddl.Items.Add(New ListItem("Select 1", "1"))
ddl.Items.Add(New ListItem("Select 2", "2"))
ddl.Visible = true

答案 3 :(得分:2)

如果数据库不存在,

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执行某些操作,具体取决于结构是否已存在。