gpt4 book ai didi

database - SQLite3 + Python3 - 使用外键创建数据库

转载 作者:搜寻专家 更新时间:2023-10-30 20:27:39 24 4
gpt4 key购买 nike

大家好,

我在使用 sqlite3 和 python3 时遇到了一些麻烦。我想我又遇到了那些愚蠢的时刻之一,但我正在尝试从根本上尝试制作下表。

关键点似乎是外键 - 我做错了什么,但我还没有完全弄清楚是什么 - 我的谷歌搜索并没有真正让我找到任何地方。我找不到任何好的文档。我在网上尝试了多种不同的外键语法,但没有一个能让我更接近工作表。

Database relational view

c.execute('''
CREATE TABLE Driver (
ID INTEGER PRIMARY KEY NOT NULL UNIQUE AUTOINCREMENT,
FirstName text,
LastName text,
RegistrationNo text)
''')

c.execute('''
CREATE TABLE Passenger (
ID INTEGER PRIMARY KEY NOT NULL UNIQUE AUTOINCREMENT,
FirstName text,
LastName text)
''')

c.execute('''
pragma foreign_keys=on;
begin transaction;

CREATE TABLE Journey (
ID INTEGER PRIMARY KEY NOT NULL UNIQUE AUTOINCREMENT,
Driver_ID INTEGER NOT NULL
FOREIGN KEY (Driver_ID) REFERENCES Driver,
Origin text,
Destination text,
SeatsAvailable integer,
Date text,
Time text,
DriverNotes text,
PassengerNotes text)
''')

c.execute('''
pragma foreign_keys=on;
begin transaction;

CREATE TABLE Assigned Passengers (
ID INTEGER PRIMARY KEY NOT NULL UNIQUE AUTOINCREMENT,
Journey_ID INTEGER NOT NULL
FOREIGN KEY (Journey_ID) REFERENCES Journey,
Passenger_ID INTEGER NOT NULL
FOREIGN KEY (Passenger_ID) REFERENCES Passenger
''')

我收到的消息之一是 -

Traceback (most recent call last):
File "/Users/Computer/Bitbucket/Python Project/sql.py", line 46, in <module>
''')
sqlite3.Warning: You can only execute one statement at a time.

第 46 行位于 Journey 创建 block 的末尾。

提前感谢任何可以提供帮助的人:)

最佳答案

  1. 正如消息告诉您的那样,您一次只能执行一个语句。
  2. 您只需为连接执行一次PRAGMA foreign_keys
  3. 执行 BEGIN TRANSACTIOn 在这里没有意义。
  4. PRIMARY KEY 约束已经暗示 NOT NULL。
  5. PRIMARY KEY 约束已经暗示了 UNIQUE。
  6. 如果表名包含空格,则必须用引号引起来。
  7. 将外键声明为表约束时,必须写在所有列之后,不能忘记分隔逗号。
  8. 将外键声明为列约束时,必须使用正确的语法:
c.execute('''
CREATE TABLE Journey (
ID INTEGER PRIMARY KEY AUTOINCREMENT,
Driver_ID INTEGER NOT NULL REFERENCES Driver(ID),
Origin text,
Destination text,
SeatsAvailable integer,
Date text,
Time text,
DriverNotes text,
PassengerNotes text)
''')
c.execute('''
CREATE TABLE Assigned_Passengers (
ID INTEGER PRIMARY KEY AUTOINCREMENT,
Journey_ID INTEGER NOT NULL REFERENCES Journey(ID),
Passenger_ID INTEGER NOT NULL REFERENCES Passenger(ID))
''')

关于database - SQLite3 + Python3 - 使用外键创建数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23583291/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com