Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLite和python-can';t设置主键_Python_Sql_Database_Sqlite - Fatal编程技术网

SQLite和python-can';t设置主键

SQLite和python-can';t设置主键,python,sql,database,sqlite,Python,Sql,Database,Sqlite,我试图使用python创建表,但是当我检查SQLite中的数据结构时,主键没有被分配。下面是其中一个表的代码。除了主键部分外,它似乎按预期工作。我是Python和SQLite新手,所以我可能遗漏了一些非常明显的东西,但找不到任何答案 # Create a database and connect conn = sql.connect('Coursework.db') c = conn.cursor() # Create the tables from the normalised schema

我试图使用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
""")

我无法用主键报告问题,当我运行SQL语句时,表是按预期创建的

除此之外,实际上并不需要绕道Pandas,在我看来,
csv
模块加上
.executemany()
似乎是一种更直接的方法,可以将数据从csv加载到表中

import csv
import sqlite3 as sql

conn = sql.connect('Coursework.db')

conn.executescript('CREATE TABLE IF NOT EXISTS room_host (room_ID integer PRIMARY KEY, host_ID integer)')
conn.commit()

with open('listings.csv', encoding='utf8', newline='') as f:
    reader = csv.reader(f, delimiter=',')
    conn.executemany('INSERT INTO room_host (room_ID, host_ID) VALUES (?, ?)', reader)
    conn.commit()

为什么要创建表,然后立即再次删除它?我明白了。。。带有“表存在检查”的整个中间部分似乎不是很有用,请将其删除。“不存在时创建表”足以添加表。但它不会覆盖现有表。因此,如果先前的尝试中已存在
room\u host
,并且它没有主键,则不会添加主键。事先放下桌子,确保它是从头开始创建的。我不确定你是否找对了地方?如果创建了表(即,如果运行CREATETABLE语句时没有错误),那么它肯定会有一个主键。所以什么使您认为它不存在?从SQL中删除“IF not EXISTS”。发生了什么?表没有主键的方式只有一种,即它的创建方式与您显示的方式不同,并且您正在查看的
CREATE table
语句从未实际运行。独立运行我答案中的代码(为什么到目前为止还没有运行呢?)谢谢。他想让我们用熊猫。我不知道我的是怎么回事,它没有分配主键。我想我可以直接在SQLite中创建表,并解释为什么您可以继续使用Pandas,如果必须的话,这是无关的。作为一个例子,我通常尝试消除复杂性,
pandas
csv
模块复杂得多。