【发布时间】:2021-03-05 09:38:18
【问题描述】:
我正在尝试使用 python 创建表,但是当我检查 SQLite 中的数据结构时,没有分配主键。这是其中一张表的代码。除了主键部分外,它似乎按预期工作。我是 Python 和 SQLite 的新手,所以我可能遗漏了一些非常明显但找不到任何答案的东西。
# Create a database and connect
conn = sql.connect('Coursework.db')
c = conn.cursor()
# Create the tables from the normalised schema
c.execute('CREATE TABLE IF NOT EXISTS room_host (room_ID integer PRIMARY KEY, host_ID integer)')
c.execute("SELECT count(name) from sqlite_master WHERE type='table' AND name='room_host'")
if c.fetchone()[0] == 1:
c.execute("DROP TABLE room_host")
else:
c.execute('CREATE TABLE room_host (room_ID integer PRIMARY KEY, host_ID integer)')
conn.commit()
# read data from csv
read_listings = pd.read_csv('listings.csv')
room_host = pd.DataFrame(read_listings, columns=['id', 'host_id'])
room_host.set_index('id')
room_host.to_sql("room_host", conn, if_exists='append', index=False)
c.execute("""INSERT INTO room_host (id, host_ID)
SELECT room_host.id, room_host.host_ID
FROM room_host
""")
【问题讨论】:
-
为什么先建表然后又马上删除?
-
我明白了……整个中间部分带有“表存在检查”似乎不是很有用,删除它。 “如果不存在则创建表”足以添加一个表。但它不会覆盖现有表。因此,如果
room_host在之前的尝试中已经存在,并且它确实 not 有主键,那么这不会添加主键。事先删除表以确保它是从头开始创建的。 -
我不确定您是否找对地方了?如果表被创建(即当你运行 CREATE TABLE 语句时没有错误),那么它肯定会有一个主键。那么......是什么让你认为它没有?
-
从 SQL 中删除“IF NOT EXISTS”。会发生什么?
-
只有 一种 方式表没有主键,即它的创建方式与您显示的方式不同,并且您正在查看的
CREATE TABLE语句永远不会实际运行。运行我的答案中的代码,独立(为什么你还没有到目前为止?)
标签: python sql database sqlite