VARCHAR 列与 autoincrement=True 不兼容

问题描述 投票:0回答:2
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Sequence, Integer, Float, String, Boolean, ForeignKey, TIMESTAMP, Enum
import datetime
from os import urandom
from binascii import hexlify
from hashlib import sha1


app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = "postgresql://postgres:neljaD44@localhost:5432/postgress";

db = SQLAlchemy(app)

运行此文件后,出现以下错误。

python2.7 create_postgresql_database.py
/usr/local/lib/python2.7/dist-packages/flask_sqlalchemy/__init__.py:873: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future.  Set it to True or False to suppress this warning.
  'SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and '
Traceback (most recent call last):
  File "create_postgresql_database.py", line 903, in <module>
    db.create_all()
  File "/usr/local/lib/python2.7/dist-packages/flask_sqlalchemy/__init__.py", line 1094, in create_all
    self._execute_for_all_tables(app, bind, 'create_all')
  File "/usr/local/lib/python2.7/dist-packages/flask_sqlalchemy/__init__.py", line 1086, in _execute_for_all_tables
    op(bind=self.get_engine(app, bind), **extra)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/schema.py", line 4745, in create_all
    ddl.SchemaGenerator, self, checkfirst=checkfirst, tables=tables
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 3079, in _run_ddl_visitor
    conn._run_ddl_visitor(visitorcallable, element, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 2081, in _run_ddl_visitor
    visitorcallable(self.dialect, self, **kwargs).traverse_single(element)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/visitors.py", line 485, in traverse_single
    return meth(obj, **kw)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/ddl.py", line 850, in visit_metadata
    _is_metadata_operation=True,
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/visitors.py", line 485, in traverse_single
    return meth(obj, **kw)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/ddl.py", line 895, in visit_table
    include_foreign_key_constraints,  # noqa
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1262, in execute
    return meth(self, multiparams, params, _EMPTY_EXECUTION_OPTS)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/ddl.py", line 78, in _execute_on_connection
    self, multiparams, params, execution_options
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1350, in _execute_ddl
    dialect=dialect, schema_translate_map=schema_translate_map
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/elements.py", line 522, in compile
    return self._compiler(dialect, **kw)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/ddl.py", line 29, in _compiler
    return dialect.ddl_compiler(dialect, self, **kw)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/compiler.py", line 455, in __init__
    self.string = self.process(self.statement, **compile_kwargs)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/compiler.py", line 490, in process
    return obj._compiler_dispatch(self, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/visitors.py", line 81, in _compiler_dispatch
    return meth(self, **kw)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/compiler.py", line 4025, in visit_create_table
    create_column, first_pk=column.primary_key and not first_pk
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/compiler.py", line 490, in process
    return obj._compiler_dispatch(self, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/visitors.py", line 81, in _compiler_dispatch
    return meth(self, **kw)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/compiler.py", line 4058, in visit_create_column
    text = self.get_column_specification(column, first_pk=first_pk)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/dialects/postgresql/base.py", line 2474, in get_column_specification
    and column is column.table._autoincrement_column
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/schema.py", line 810, in _autoincrement_column
    return self.primary_key._autoincrement_column
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/langhelpers.py", line 1097, in __get__
    obj.__dict__[self.__name__] = result = self.fget(obj)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/schema.py", line 3954, in _autoincrement_column
    _validate_autoinc(col, True)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/schema.py", line 3928, in _validate_autoinc
    "compatible with autoincrement=True" % (col.type, col)
sqlalchemy.exc.ArgumentError: Column type VARCHAR(64) on column 'sessions.session_id' is not compatible with autoincrement=True
root@bdnewsbdnews:/home/khondakar/Desktop# 
python sqlalchemy
2个回答
0
投票

您不能将

VARCHAR
列设置为
autoincrement = True
。您应该使用
INTEGER
列(例如,最常见的列)。


0
投票

尝试在 schema.py 文件第 5046 行处从 True 更改为 False

        if len(self._columns) == 1:
        col = list(self._columns)[0]

        if col.autoincrement is True:
            _validate_autoinc(col, False) # from True to False

            return col
        elif col.autoincrement in (
            "auto",
            "ignore_fk",
        ) and _validate_autoinc(col, False):
            return col
        else:
            return None
© www.soinside.com 2019 - 2024. All rights reserved.