Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.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
Python 是否有必要使uqiue索引列不可为空(SQL、SQLAlchemy)?_Python_Sql_Sqlalchemy_Flask Sqlalchemy - Fatal编程技术网

Python 是否有必要使uqiue索引列不可为空(SQL、SQLAlchemy)?

Python 是否有必要使uqiue索引列不可为空(SQL、SQLAlchemy)?,python,sql,sqlalchemy,flask-sqlalchemy,Python,Sql,Sqlalchemy,Flask Sqlalchemy,我不确定该把这个问题贴在哪里。是否有必要使唯一索引列不可为空,如以下所示(使用SQLAlchemy): name=db.Column(db.String(64),index=True,unique=True,nullable=False)#是的,唯一列可以为NULL。如果要控制此操作,您仍然需要使用nullable=False 如果省略nullable=False,则具体行为取决于方言。一些允许多个空值,其他的在测试唯一性时只允许一个空值 首先,我们可以看到以下几点 :param nullabl

我不确定该把这个问题贴在哪里。是否有必要使唯一索引列不可为空,如以下所示(使用SQLAlchemy):


name=db.Column(db.String(64),index=True,unique=True,nullable=False)#是的,唯一列可以为NULL。如果要控制此操作,您仍然需要使用
nullable=False

如果省略
nullable=False
,则具体行为取决于方言。一些允许多个空值,其他的在测试唯一性时只允许一个空值

首先,我们可以看到以下几点

:param nullable:当设置为
False
时,将导致“NOT NULL” 为列生成DDL时要添加的短语。什么时候
True
,通常不会生成任何内容(在SQL中,默认为 “NULL”),但在某些非常特定于后端的边缘情况下除外 其中“NULL”可以显式呈现。默认值为
True
,除非 :paramref:
~.列。主键也是
True
,在这种情况下 默认值为
False
。此参数仅在发出时使用 创建表语句

我不能涵盖所有方言,但我的搜索似乎表明,大多数方言都允许在一列中有多个空条目,并具有唯一的约束条件,例如状态:

SQL标准要求强制执行唯一约束,即使约束中的一个或多个列为NULL,但SQLite 不这样做。这不是一个bug吗?

SQLite遵循解释(1),PostgreSQL、MySQL、Oracle、, 还有火鸟。Informix和Microsoft SQL Server使用 解释(2),但是我们SQLite开发人员认为 解释(1)是对需求和需求的最自然的解读 我们还希望最大限度地提高与其他SQL数据库的兼容性 引擎和大多数其他数据库引擎也使用(1),因此 SQLite的功能


是,唯一列可以为空。如果要控制此操作,您仍然需要使用
nullable=False

如果省略
nullable=False
,则具体行为取决于方言。一些允许多个空值,其他的在测试唯一性时只允许一个空值

首先,我们可以看到以下几点

:param nullable:当设置为
False
时,将导致“NOT NULL” 为列生成DDL时要添加的短语。什么时候
True
,通常不会生成任何内容(在SQL中,默认为 “NULL”),但在某些非常特定于后端的边缘情况下除外 其中“NULL”可以显式呈现。默认值为
True
,除非 :paramref:
~.列。主键也是
True
,在这种情况下 默认值为
False
。此参数仅在发出时使用 创建表语句

我不能涵盖所有方言,但我的搜索似乎表明,大多数方言都允许在一列中有多个空条目,并具有唯一的约束条件,例如状态:

SQL标准要求强制执行唯一约束,即使约束中的一个或多个列为NULL,但SQLite 不这样做。这不是一个bug吗?

SQLite遵循解释(1),PostgreSQL、MySQL、Oracle、, 还有火鸟。Informix和Microsoft SQL Server使用 解释(2),但是我们SQLite开发人员认为 解释(1)是对需求和需求的最自然的解读 我们还希望最大限度地提高与其他SQL数据库的兼容性 引擎和大多数其他数据库引擎也使用(1),因此 SQLite的功能


这取决于数据库。例如,在MySQL中,需要设置
nullable=False
。就SQLA本身而言,我不确定它是否具有标准化的行为,还是仅仅依赖于基础库。在许多数据库管理系统中,同时具有
index=True
unique=True
是冗余的,因为唯一约束是使用唯一索引强制执行的。这取决于数据库。例如,在MySQL中,需要设置
nullable=False
。就SQLA本身而言,我不确定它是否具有标准化的行为,或者仅仅依赖于基础库。在许多数据库管理系统中,同时具有
index=True
unique=True
是冗余的,因为使用唯一索引强制执行唯一约束。