【问题标题】:Create table with auto increment创建具有自动增量的表
【发布时间】:2019-11-11 09:13:17
【问题描述】:

我必须创建一个带有自动增量列的表。我正在创建一个以 sqlite 作为背景的 web 应用程序,sql alchemy 是 orm 层。Python 和 Flask 作为前端。我正在创建一些部门列表,部门 id 应该自动递增。当我尝试通过 UI 添加部门时,我不提供部门 id。因为部门 id 是主键,应该自动递增。我已经添加了部门名称和部门工作通过 UI 没有任何错误。但是当我尝试列出部门列表时出现错误。 AttributeError: 'NoneType' 对象没有属性 'department_id'

我尝试的是,我的 sqlite

create table Departments(department_id primarykey integer autoincrement,department_name char,department_jobs char);

当我尝试创建此架构时,我收到一个名为“自动增量附近的语法错误”的错误

我尝试使用大写字母、auto_increment、auto increment。

什么都没有

我的 sql 炼金术是这样的

class Departments(db.Model):
    "Adding the department" 
    department_id = db.Column(db.Integer,primary_key=True)   
    department_name = db.Column(db.String(50),nullable=False)   
    department_jobs = db.Column(db.String(40),nullable=False)

我在这里期待的是如何在 sqllite 和 sqlalchemy 中进行自动增量,以便我可以在前端和后端使用它。

【问题讨论】:

  • 请注意,您只需要INTEGER PRIMARY KEY 并且在插入行以获取自动生成的值时不为该列提供值。 AUTOINCREMENT 关键字只是更改了用于计算数字的算法,并且确实建议不要使用它,除非您明确需要它的特定行为。详情请见sqlite.org/autoinc.html

标签: sqlite


【解决方案1】:

您已经编码了 PRIMARYKEY 而不是 PRIMARY KEY,并且您还应该编码 INTEGER PRIMARY KEY,因为 列类型 应该首先出现。 p>

根据您的解释,无需编写 AUTOINCREMENT 代码。

不使用 AUTOINCREMENT 会更有效,并且就您而言,会做同样的事情。即如果没有提供 department_id 的值,那么 SQLite 将自动生成一个值,插入的第一行为 1,下一行通常为 1,依此类推(SQLite 不保证单调递增的数字) .

SQLite Autoincrement 其中包括

AUTOINCREMENT 关键字会带来额外的 CPU、内存、磁盘空间和磁盘 I/O 开销,如果不是严格需要,应避免使用。通常不需要。

我建议只使用 :-

create table Departments(department_id INTEGER PRIMARY KEY,department_name char,department_jobs char);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 2017-08-25
    • 1970-01-01
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    相关资源
    最近更新 更多