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

2024-05-26 11:13:30 发布

您现在位置: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提示:

The ATTACH DATABASE statement adds another database file to the current database connection.

我每次都要连接数据库吗?你知道吗

我计划使用附加数据库作为模式,但也许我应该尝试其他方法?你知道吗

我在iOS的Pythonista应用程序中使用python


Tags: id数据库closeexecutedbconnectnotzip
1条回答
网友
1楼 · 发布于 2024-05-26 11:13:30

几乎所有可以在SQLite中更改的设置都只应用于当前连接,即不保存在数据库文件中。 因此,只要重新打开主数据库,就必须重新附加任何数据库。你知道吗

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

SQLite没有架构。如果您想用附加的数据库来模拟它们,您必须接受这种方法的限制。你知道吗

相关问题 更多 >