标签: alembic

alembic 未检测到关系表

我已经定义了一些模型,其中包含一些用于 m2m 关系的关联表:

from itsdangerous import TimedJSONWebSignatureSerializer
from passlib.hash import bcrypt
from sqlalchemy.ext.declarative import declarative_base

import app 
from app import db

Base = declarative_base()

class UserGroupRelationship(Base):

    __tablename__ = 'users_groups'
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'), primary_key=True)
    group_id = db.Column(db.Integer, db.ForeignKey('groups.id'), primary_key=True)

class FriendRelationship(Base):
    __tablename__ = u'users_friends'

    id = db.Column(db.Integer, primary_key=True)
    user_left = db.Column(db.Integer, db.ForeignKey('users.id'), primary_key=True)
    user_right = db.Column(db.Integer, db.ForeignKey('users.id'), primary_key=True)


class User(db.Model):

    __tablename__ = u'users'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    email = db.Column(db.String(120), unique=True)
    password = …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy flask alembic

1
推荐指数
1
解决办法
3268
查看次数

用 uuid 替换整数 id 字段

我需要用 uuid 替换模型中的默认整数 id。问题是它正在另一个模型(外键)中使用。关于如何在不丢失数据的情况下执行此操作的任何想法?

class A(Base):
    __tablename__ = 'a'

    b_id = Column(
       GUID(), ForeignKey('b.id'), nullable=False,
       server_default=text("uuid_generate_v4()")
    )

class B(Base):
    __tablename__ = 'b'
    id = Column(
        GUID(), primary_key=True,
        server_default=text("uuid_generate_v4()")
    )
Run Code Online (Sandbox Code Playgroud)

不幸的是它不起作用,而且我担心我会破坏这种关系。

sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) default for column "id" cannot be cast automatically to type uuid
Run Code Online (Sandbox Code Playgroud)

我尝试过的 Alembic 迁移类似于:

op.execute('ALTER TABLE a ALTER COLUMN b_id SET DATA TYPE UUID USING (uuid_generate_v4())')
Run Code Online (Sandbox Code Playgroud)

python postgresql sqlalchemy alembic

1
推荐指数
1
解决办法
2440
查看次数

有没有办法使用flask-migrate/alembic列出已应用于数据库的迁移?

我想列出所有迁移和数据库状态(是否已应用迁移)。

我正在寻找与 Rails 相当的东西rake db:migrate:status

示例输出rake db:migrate:status

database: dev

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20180108162849  Add user table
   up     20180110135954  Add article table
  down    20180130152036  Add index to user
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy flask alembic flask-migrate

1
推荐指数
1
解决办法
1538
查看次数

Alembic:有没有办法在数据库中存储头修订号?

有什么方法可以将当前修订号存储在数据库中吗?我的意思是,当我生成迁移和升级头时,如何在数据库中插入此修订号,并在下次进行迁移时检查表中的此修订号。

python sqlalchemy alembic

1
推荐指数
1
解决办法
1530
查看次数

使用 sqlalchemy、alembic 将列动态添加到现有表

我想动态地将列添加到数据库中的表中,因为我不想在 SQLalchemy 类中设置表时指定所有列

为了解决这个问题,我使用 alembic 将列添加到表中,但我遇到了问题。

在我的 python 脚本中,我定义了一个类,如下所示。

DATABASE_URL_dev = "postgresql+psycopg2://user:password@localhost:5432/testdb"

engine = create_engine(DATABASE_URL_dev)
Base = declarative_base(engine)


class my_class1(Base):
    __tablename__ = "test1"

    id = Column(Integer, primary_key=True)
    list = Column(String)

def  loadsession():
    Base.metadata.create_all(engine)
    Session = sessionmaker(bind=engine)
    session = Session()
    return session

session = loadsession()
Run Code Online (Sandbox Code Playgroud)

现在我想向数据库中的表 test1 添加一个新列(“new_column”)。

然后,我使用 Alembic 按照https://alembic.sqlalchemy.org/en/latest/tutorial.html上的说明进行操作,并执行了以下操作:

  1. 通过运行 pip install alembic 安装了 alembic
  2. 使用 alembic init alembic 创建环境
  3. 通过在 sqlalchemy.url 输入“postgresql+psycopg2://user:password@localhost:5432/testdb”来编辑 .ini 文件
  4. 通过运行 alembic revision -m "add a column " 创建迁移脚本
  5. 然后,我通过在 Upgrade() 中添加以下“op.add_column('test1', sa.Column('new_column', …

python sqlalchemy alembic

1
推荐指数
1
解决办法
1万
查看次数

alembic 自动生成创建空迁移但生成表

我按照Alembic 的文档自动生成迁移。我的项目结构如下所示:

alembic/
  versions/
  env.py
  README
  script.py.mako
data/
  __init__.py
  db.py
  models.py
alembic.ini
app.db
Run Code Online (Sandbox Code Playgroud)

env.py我完全按照文档进行了更改:

from logging.config import fileConfig

from sqlalchemy import engine_from_config
from sqlalchemy import pool

from alembic import context
from data.models import Base

# this is the Alembic Config object, which provides
# access to the values within the .ini file in use.
config = context.config

# Interpret the config file for Python logging.
# This line sets up loggers basically.
fileConfig(config.config_file_name)

# add your model's …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy-migrate alembic

1
推荐指数
1
解决办法
3189
查看次数

用于烧瓶的Alembic迁移

我一直试图在过去的7个小时内为我的Flask应用程序配置Alembic迁移系统但没有成功.关于我做错了什么的任何想法?

我已经尝试了我在这里找到的所有解决方案,但它们似乎对我不起作用.

I get the following error after running the commands:
$ heroku run alembic revision -m "please work" --autogenerate
Running `alembic revision -m please work --autogenerate` attached to terminal... up, run.6050
Traceback (most recent call last):
  File "/app/.heroku/python/bin/alembic", line 9, in <module>
    load_entry_point('alembic==0.5.0', 'console_scripts', 'alembic')()
  File "/app/.heroku/python/lib/python2.7/site-packages/pkg_resources.py", line 337, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/app/.heroku/python/lib/python2.7/site-packages/pkg_resources.py", line 2281, in load_entry_point
    return ep.load()
  File "/app/.heroku/python/lib/python2.7/site-packages/pkg_resources.py", line 1991, in load
    entry = __import__(self.module_name, globals(),globals(), ['__name__'])
Run Code Online (Sandbox Code Playgroud)

ImportError:没有名为config的模块

另外,请注意,我正试图让它在Heroku上工作

我的env.py文件的一部分:

from alembic import …
Run Code Online (Sandbox Code Playgroud)

python heroku flask flask-sqlalchemy alembic

0
推荐指数
1
解决办法
1082
查看次数

Alembic SqlAlchemy Postgres"NameError:name'String'未定义"试图添加Array(String)字段

下面的模型加上错误信息.

我试图使用Alembic创建一些数组列,但获取NameError:name'String'未定义.

任何有价值的帮助

谢谢!

from sqlalchemy import Column, String, Integer, DateTime
from serve_spec.db_global import db
import datetime
from time import time
from sqlalchemy.dialects.postgresql import JSON
from sqlalchemy.dialects.postgresql import ARRAY

class Issues(db.Base):

    __tablename__ = 'issues'

    id = Column(String, primary_key=True)
    thread_id                   = Column(String, nullable=False)
    created                     = Column(DateTime(timezone=False), nullable=False, default=datetime.datetime.utcnow)
    created_timestamp           = Column(Integer, nullable=False, default=time)
    created_by_user_name        = Column(String, nullable=False)
    is_parent                   = Column(Integer, nullable=False)
    parent_title                = Column(String)
    subscribed                  = Column(ARRAY(String))
    unsubscribed                = Column(ARRAY(String))
    pending_notifications_web   = Column(ARRAY(String))
    pending_notifications_email = Column(ARRAY(String))
    markdown_text               = Column(String, nullable=False, ) …
Run Code Online (Sandbox Code Playgroud)

python postgresql sqlalchemy python-3.x alembic

0
推荐指数
1
解决办法
1496
查看次数

SQLAlchemy 使用naming_convention创建多列索引

我正在尝试为基于模型的表创建多个(即2列索引)。但我不想给出这个索引的具体名称。我想要这样naming_convention,并且alembic revision --autogenerate会通过命名索引来完成它的工作。到目前为止我有这样的代码:

from sqlalchemy import MetaData
from sqlalchemy.ext.declarative import as_declarative
from sqlalchemy.schema import Index

metadata = MetaData(
        naming_convention={
            'pk': '%(table_name)s_pk',
            'ix': '%(table_name)s_%(column_0_N_name)s_ix',
        },
    )

@as_declarative(metadata=metadata)
class Base:
    pass

class Foo(Base):
    id = Column(Integer, primary_key=True)
    col1 = Column('Col1', Integer)
    col2 = Column('Col2', DateTime)

Index(
    metadata.naming_convention['ix'] % {
        'table_name': Foo.__tablename__,
        'column_0_N_name': Foo.col1.expression.name + "_" + Foo.col2.expression.name
    },
    Foo.col1,
    Foo.col2,
)
Run Code Online (Sandbox Code Playgroud)

所以我想避免代码的“创建名称”部分:

    metadata.naming_convention['ix'] % {
        'table_name': Foo.__tablename__,
        'column_0_N_name': Foo.col1.expression.name + "_" + Foo.col2.expression.name
    }
Run Code Online (Sandbox Code Playgroud)

indexing sqlalchemy alembic

0
推荐指数
1
解决办法
2238
查看次数