【发布时间】:2014-02-15 04:57:43
【问题描述】:
SQLAlchemy 正在为 postgresql 中的列生成但不启用序列。我怀疑我在引擎设置中可能做错了什么。
使用 SQLAlchemy 教程 (http://docs.sqlalchemy.org/en/rel_0_9/orm/tutorial.html) 中的示例:
#!/usr/bin/env python
from sqlalchemy import create_engine, Column, Integer, String, Sequence
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, Sequence('user_id_seq'), primary_key=True)
name = Column(String(50))
fullname = Column(String(50))
password = Column(String(12))
def __repr__(self):
return "<User(name='%s', fullname='%s', password='%s')>" % (
self.name, self.fullname, self.password)
db_url = 'postgresql://localhost/serial'
engine = create_engine(db_url, echo=True)
Base.metadata.create_all(engine)
使用此脚本,生成下表:
serial=# \d+ users
Table "public.users"
Column | Type | Modifiers | Storage | Stats target | Description
----------+-----------------------+-----------+----------+--------------+-------------
id | integer | not null | plain | |
name | character varying(50) | | extended | |
fullname | character varying(50) | | extended | |
password | character varying(12) | | extended | |
Indexes:
"users_pkey" PRIMARY KEY, btree (id)
Has OIDs: no
然而,一个序列被创建:
serial=# select sequence_schema,sequence_name,data_type from information_schema.sequences ;
sequence_schema | sequence_name | data_type
-----------------+---------------+-----------
public | user_id_seq | bigint
SQLAlchemy 0.9.1、Python 2.7.5+、Postgresql 9.3.1、Ubuntu 13.10
-里斯
【问题讨论】:
-
纯
\d users?里面有default nextval('users_id_seq')吗? -
检查您的 CREATE TABLE 语句是否正确,使用此处的说明:docs.sqlalchemy.org/en/latest/…。另外,我使用 Postgres 并且我没有明确定义序列,我让 Postgres 的 SERIAL 类型为我做这件事。我只定义了
id = Column(Integer, primary_key=True),SQL Alchemy 默认将其设置为 SERIAL 类型 -
就是这样,@dtheodor!教我不要阅读文档! (实际上 SQLAlchemy 的文档是最好的。)谢谢。
-
@dtheodor 链接不再有效,我遇到了同样的问题。有不同的链接吗?我想检查一下,因为我也从
sqllite3迁移到postgresqlstackoverflow.com/questions/33225636/… -
@thesayhey 看起来它被移到了这里:docs.sqlalchemy.org/en/rel_0_9/faq/…(通过谷歌搜索找到“sqlalchemy how-can-i-get-the-create-table-drop-table-output-as-a-字符串")
标签: python sql postgresql sqlalchemy