Sqlite3我是否必须在每个连接上附加数据库?

时间:2017-03-09 15:10:39

标签: sqlite python

以下代码创建了两个数据库:

import sqlite3

db = 'brazil' 
conn = sqlite3.connect(db+'.db') 
c = conn.cursor() 
qCreate = """
CREATE TABLE states
(zip_id numeric NOT NULL, 
 state_name text NOT NULL, 
CONSTRAINT pk_brazil 
PRIMARY KEY (zip_id) """ 
c.execute(qCreate)   
conn.commit() 
conn.close()

db = 'city'
conn = sqlite3.connect(db+'.db')
c = conn.cursor()
qCreate = """CREATE TABLE rio_de_janeiro
(zip_id numeric NOT NULL,
beach_name text NOT NULL,
CONSTRAINT pk_rio
PRIMARY KEY (zip_id)
"""
c.execute(qCreate)
conn.commit()
conn.close()

以下代码将数据库RIO附加到数据库BRAZIL并打印所有数据库(Rio和Brazil)。

db = 'brazil'
conn = sqlite3.connect(db+'.db')
c = conn.cursor()
qCreate = """ATTACH DATABASE ? AS competition """
c.execute(qCreate, ('rio.db',))
c.execute("PRAGMA database_list")
data = c.fetchall()
print data
conn.commit()
conn.close()

但是,以下代码只打印巴西数据库:

db = 'brazil'
conn = sqlite3.connect(db+'.db')
c = conn.cursor()
c.execute("PRAGMA database_list")
data = c.fetchall()
print data
conn.commit()
conn.close()

不再附加附加数据库。

这些行上的sqlite3 documentation提示:

  

ATTACH DATABASE语句将另一个数据库文件添加到当前数据库连接。

每次都必须附加数据库吗?

我计划使用附加的数据库作为模式,但也许我应该尝试其他的东西?

我在iOS中的Pythonista App中使用python

1 个答案:

答案 0 :(得分:2)

您在SQLite中可以更改的几乎所有设置仅适用于当前连接,即不会保存在数据库文件中。 因此,只要重新打开主数据库,就必须重新连接任何数据库。

只有在由于某些外部约束而必须使用多个数据库文件时,才使用附加数据库。在大多数情况下,您应该只使用一个数据库。

SQLite没有架构。如果您想使用附加数据库模拟它们,您必须忍受该方法的局限性。