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#
您不能将
VARCHAR
列设置为 autoincrement = True
。您应该使用 INTEGER
列(例如,最常见的列)。
尝试在 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