以下代码创建了两个数据库:
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
答案 0 :(得分:2)
您在SQLite中可以更改的几乎所有设置仅适用于当前连接,即不会保存在数据库文件中。 因此,只要重新打开主数据库,就必须重新连接任何数据库。
只有在由于某些外部约束而必须使用多个数据库文件时,才使用附加数据库。在大多数情况下,您应该只使用一个数据库。
SQLite没有架构。如果您想使用附加数据库模拟它们,您必须忍受该方法的局限性。