Django后端Snowflake
项目描述
Snowflake后端Django
安装和使用
使用与您的Django版本相对应的django-snowflake版本。例如,要获取Django 5.1.x的最新兼容版本
pip install django-snowflake==5.1.*
Django的次要版本号与django-snowflake的次要版本号不对应。使用每个的最后一个次要版本。
配置Django的DATABASES设置,例如以下
DATABASES = {
    'default': {
        'ENGINE': 'django_snowflake',
        'NAME': 'MY_DATABASE',
        'SCHEMA': 'MY_SCHEMA',
        'WAREHOUSE': 'MY_WAREHOUSE',
        'USER': 'my_user',
        'PASSWORD': 'my_password',
        'ACCOUNT': 'my_account',
        # Include 'OPTIONS' if you need to specify any other
        # snowflake.connector.connect() parameters, documented at:
        # https://docs.snowflake.com/en/user-guide/python-connector-api.html#connect
        'OPTIONS': {
            # Examples:
            'role': 'MY_ROLE',
            # To use native Okta authenticators:
            # https://docs.snowflake.com/en/user-guide/admin-security-fed-auth-use#native-sso-okta-only
            'authenticator': 'https://example.okta.com',
            # To use private key authentication:
            'private_key_file': '<path>/rsa_key.p8',
            'private_key_file_pwd': 'my_passphrase',
        },
    },
}
持久连接
要使用持久连接,设置Django的CONN_MAX_AGE和Snowflake Python连接器的client_session_keep_alive
DATABASES = {
    'default': {
        # ...
        'CONN_MAX_AGE': None,
        'OPTIONS': {
            'client_session_keep_alive': True,
        },
    },
}
Django字段说明
- 
与Snowflake的约定一致,此后端将所有数据库标识符(表名、列名等)转换为大写,除非它们被引号括起来,例如: db_table='"table_name"'。
- 
Snowflake支持定义外键和唯一约束,但它不会强制执行这些约束。因此,Django管理这些约束, inspectdb会检测它们,但如果违反了这些约束,Django不会引发IntegrityError。
- 
Snowflake不支持索引。因此,Django忽略在模型或字段上定义的任何索引。 
- 
Snowflake不支持检查约束,因此各种 PositiveIntegerField模型字段允许负值(尽管表单级别的验证仍然有效)。
关于Django查询集的注意事项
- 
Snowflake对子查询的支持有限。 
- 
QuerySet.explain()的format参数的有效值是'json'、'tabular'和'text'。默认值是'tabular'。
已知问题和限制
此列表并不详尽。如果您遇到问题,请查阅django_snowflake/features.py以查看是否有类似的测试被跳过。如果您遇到值得记录的问题,请在GitHub上创建一个问题。
- 
Snowflake不支持 last_insert_id来检索新创建对象的ID。相反,此后端会发出查询SELECT MAX(pk_name) FROM table_name来检索ID。如果对象同时创建,则这可能导致竞态条件。这使得此后端不适合在多个客户端可能同时创建对象的Web应用场景中使用。此外,在创建对象时不应手动指定ID(例如:MyModel(id=1))。
- 
由于snowflake-connector-python的缺少VARIANT支持,一些具有复杂JSON参数的 JSONField查询无法正常工作。例如,如果 value是JSONField,则以下操作不会成功>>> JSONModel.objects.filter(value__k={"l": "m"}) 一个解决方案是 >>> from django.db.models.expressions import RawSQL >>> JSONModel.objects.filter(value__k=RawSQL("PARSE_JSON(%s)", ('{"l": "m"}',))) 此外, QuerySet.bulk_update()不支持JSONField。
- 
当间隔是列时,间隔数学不受支持。 
- 
当间隔为null时,间隔数学会导致崩溃。 
故障排除
调试日志
要解决与Snowflake连接的问题,您可以使用Django的LOGGING设置启用Snowflake Connector for Python的日志记录。
这是Django默认"loggers"配置的附加最小配置,它启用了连接器的DEBUG日志记录
LOGGING = {
    …
    "loggers": {
        …
        "snowflake.connector": {
            "level": "DEBUG",
            "handlers": ["console"],
        },
    },
}
          项目详细信息
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装软件包 的信息。