标签: sqlalchemy-migrate

金字塔架构迁移

我在Gentoo下使用"vanilla"Pyramid 1.4,我希望对我的表进行更改并提交它们而不必删除表(及其所有数据),然后重新创建它.我听说过这个解决方案是架构迁移.

作为Django的长期用户,我一直在使用django-south,但现在我正在使用Pyramid我找不到任何方法来处理迁移.我读过sqlalchemy-migrate,看起来非常好,但我不确定如何让它与金字塔一起工作.

有没有办法在Pyramid 1.4中处理模式迁移?如果使用sqlalchemy-migrate是明智的选择,我如何让它与金字塔一起使用?

干杯.

python sqlalchemy database-migration sqlalchemy-migrate pyramid

4
推荐指数
2
解决办法
3336
查看次数

为什么我得到SQLAlchemy错误"__table_args__值必须是元组,字典或无"

我有以下SQLAlchemy模型.它已成功迁移到数据库:

class MyClassA(db.Model, Timestamp):
    a_id = db.Column(db.Integer, nullable=False, primary_key=True)
    b_id = db.Column(db.Integer, db.ForeignKey(C.c_id), nullable=False)
    d = db.Column(db.String(1024))
    e_id = db.Column(db.Integer,
                      db.ForeignKey(e.e_id))
Run Code Online (Sandbox Code Playgroud)

现在我想在第二和第四个字段中添加唯一性约束.所以我将以下行添加到模型中:

     __table_args__ = db.UniqueConstraint('b_id', 'e_id', name='unique_constraint_bid_eid')
Run Code Online (Sandbox Code Playgroud)

但是现在当我尝试迁移它时,我收到以下错误:

sqlalchemy.exc.ArgumentError: __table_args__ value must be a tuple, dict, or None
Run Code Online (Sandbox Code Playgroud)

为什么我收到此错误?我该如何解决?我尝试将等式的右侧放在括号中,但这并没有解决它.

python sqlalchemy sqlalchemy-migrate flask-sqlalchemy

4
推荐指数
2
解决办法
1364
查看次数

使用SQLAlchemy-Migrate创建具有外键约束的表时出错

我在python中构建一个应用程序.我正在使用sqlalchemy-migrate来跟踪我的数据库架构.我有一个表user_category,它有两列:id和name.我正在尝试使用user_category表的外键创建一个用户表.我创建用户表的更改脚本如下:

from sqlalchemy import *
from migrate import *
from migrate.changeset import *

meta = MetaData()
user_category = Table('user_category', meta)

user = Table('user', meta,
    Column('id', Integer, primary_key=True),
    Column('email', String(255)),
    Column('first_name', String(40)),
    Column('surname', String(40)),
    Column('password', String(255)),
    Column('user_category', Integer, ForeignKey("user_category.id")),
)

def upgrade(migrate_engine):
    # Upgrade operations go here. Don't create your own engine; bind migrate_engine
    # to your metadata
    meta.bind = migrate_engine
    user.create()

def downgrade(migrate_engine):
    # Operations to reverse the above upgrade go here.
    meta.bind = migrate_engine
    user.drop()
Run Code Online (Sandbox Code Playgroud)

当我运行'manage.py test'时,我得到并且错误: …

python sqlalchemy sqlalchemy-migrate

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

为什么buildbot抛出ImportError:无法导入名称异常?

我目前正在尝试理解buildbot,并且正在完成教程的第一部分.但我被困在我应该创建主人的部分.我尝试使用网站修复错误,但仍然给我错误.

Traceback (most recent call last):
File "./bin/buildbot", line 5, in <module>
pkg_resources.run_script('buildbot==0.8.7p1', 'buildbot')
File "/home/hari/tmp/buildbot/sandbox/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/pkg_resources.py", line 489, in run_script
File "/home/hari/tmp/buildbot/sandbox/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/pkg_resources.py", line 1207, in run_script
File "/home/hari/tmp/buildbot/sandbox/lib/python2.7/site-packages/buildbot-0.8.7p1-py2.7.egg/EGG-INFO/scripts/buildbot", line 4, in <module>
runner.run()
File "/home/hari/tmp/buildbot/sandbox/lib/python2.7/site-packages/buildbot-0.8.7p1-py2.7.egg/buildbot/scripts/runner.py", line 696, in run
subcommandFunction = reflect.namedObject(subconfig.subcommandFunction)
File "/home/hari/tmp/buildbot/sandbox/lib/python2.7/site-packages/Twisted-13.0.0-py2.7- linux-x86_64.egg/twisted/python/_reflectpy3.py", line 151, in namedObject
module = namedModule('.'.join(classSplit[:-1]))
File "/home/hari/tmp/buildbot/sandbox/lib/python2.7/site-packages/Twisted-13.0.0-py2.7-linux-x86_64.egg/twisted/python/_reflectpy3.py", line 137, in namedModule
topLevel = __import__(name)
File "/home/hari/tmp/buildbot/sandbox/lib/python2.7/site-packages/buildbot-0.8.7p1-py2.7.egg/buildbot/scripts/create_master.py", line 23, in <module>
from buildbot.db import connector
File "/home/hari/tmp/buildbot/sandbox/lib/python2.7/site-packages/buildbot-0.8.7p1-py2.7.egg/buildbot/db/connector.py", line 22, in …
Run Code Online (Sandbox Code Playgroud)

buildbot sqlalchemy-migrate python-2.7

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

重命名模型时,SQLAlchemy-Migrate删除数据

我正在使用SQLAlchemy-Migrate来管理PostgreSQL数据库的迁移。我更改__tablename__了模型的,并且运行迁移更改了数据库中的名称,但表中的所有行均被删除。如何重命名模型而不删除数据?

class Contract(db.Model):
    __tablename__ = 'contract'
    id = db.Column(db.Integer, primary_key=True)
    is_valid = db.Column(db.Boolean, default=IS_VALID)
Run Code Online (Sandbox Code Playgroud)

我将其从重命名为contractcontracts并进行以下迁移:

def upgrade(migrate_engine):
    pre_meta.bind = migrate_engine
    post_meta.bind = migrate_engine
    pre_meta.tables['contract'].drop()
    post_meta.tables['contracts'].create()
Run Code Online (Sandbox Code Playgroud)

它删除旧表并创建一个新表。我从未检查过其他迁移脚本,因为它们始终在不删除数据的情况下运行。

python sqlalchemy sqlalchemy-migrate

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

SQL-alchemy:ValueError要解压的值太多了?

我有一个运行mysql数据库的网站使用sql-alchemy包突然崩溃了.我做了一些研究,发现预期的问题是最新的sql-alchemy更新正在向flask-admin交付一个比预期更多的值

"cls, key = identity_key(instance=obj)"
Run Code Online (Sandbox Code Playgroud)


来源

建议的修复是编辑文件以接受第三个项目,但我无法使用我在环境中的权限执行此操作.

另一个答案链接到github上的回购,但我无法弄清楚这对我有什么帮助.我对此非常陌生,我不知道是否应该克隆回购或者如果我是这样做的话.

任何帮助表示赞赏!

这是错误转储

2018-01-22 20:01:59,593:[2018-01-22 20:01:59,592]应用程序中的错误:/ reservation/add [GET]
2018-01-22 20:01:59,594:Traceback(大多数情况下)最近的呼叫最后):
2018-01-22 20:01:59,594:
文件"fakepath/flask/app.py",1982年,在wsgi_app 2018-01-22
20:01:59,594:response = self.full_dispatch_request() 2018年1月22日20:01:59594:文件"fakepath /烧瓶/ app.py",线1614,在full_dispatch_request
2018年1月22日20:01:59594:RV = self.handle_user_exception(E)
2018-01- 22 20:01:59,595:文件"fakepath/flask/app.py",第1517行,在handle_user_exception2018-01-22 20:01:59,595:reraise(exc_type,exc_value,tb)2018-01-22 20:01: 59,595:文件"fakepath/flask/_compat.py",第33行,重新加入
2018-01-22 20:01:59,595:提升值2018-01-22 20:01:59,595:文件"fakepath/flask/app.py ",第1612行,在full_dispatch_request中2018-01-22
20:01:59,595:rv = self.dispatch_request()2018-01-22
20:01:59,596:文件"fakepath/flask/app.py",第1598行,在dispatch_request2018-01-22 20:01:59,596:return self.view_functionsrul e.endpoint 2018-01-22
20:01:59,596:文件"fakepath/flask_login/utils.py",第261行,在decorated_view
2018-01-22 20:01:59,596:return func(*args,**kwargs )
2018-01-22 20:01:59,597:文件"/home/apoalphagammawebmaster/inventory/app/auth/views.py",第248行,在add_reservation中2018-01-22
20:01:59,597:form = form, title ='Add Reservation')
2018-01-22 20:01:59,597:文件"fakepath/flask/templating.py",第134行,在render_template2018-01-22 20:01:59,597:context,ctx.app)
2018-01-22 20:01:59,597:文件"fakepath/flask/templating.py",第116行,在_render 2018-01-22
20:01:59,597:rv = template.render(context)
2018-01- 22 20:01:59,598:文件"fakepath/jinja2/asyncsupport.py",第76行,渲染
2018-01-22 20:01:59,598:return original_render(self,*args,**kwargs)2018-01- 22 20:01:59598:文件"fakepath/Jinja2的/ environment.py",线路1008,在渲染
2018年1月22日20:01:59598:返回self.environment.handle_exception(exc_info,真) …

python mysql sqlalchemy sqlalchemy-migrate flask-sqlalchemy

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

ModuleNotFoundError:没有名为“sqlalchemy”的模块

我是 sqlalchemy 的新手,尝试在 mysql 中创建表。创建了一个虚拟环境并执行了以下命令。pip3 安装 sqlalchemy pip3 安装 sqlalchemy-migrate

Python 版本 - 3.6.4,但是当我尝试在终端上执行命令“python models.py”时,会弹出错误

File "models.py", line 1, in <module>
    from sqlalchemy import Table, Column, Integer, MetaData, ForeignKey, DateTime, Float, BigInteger, String, func
ModuleNotFoundError: No module named 'sqlalchemy'
Run Code Online (Sandbox Code Playgroud)
from sqlalchemy import Table, Column, Integer, MetaData, ForeignKey, DateTime, Float, BigInteger, String, func

import helper.connection_util as connection_util

metadata = MetaData()

# employee TABLE
employee = Table('employee', metadata,
                    Column('employee_id', Integer, primary_key=True),
                    Column('employee_name', String(100)),
                    Column('employee_designation', String(100)),

metadata.create_all(connection_util.get_connection())
Run Code Online (Sandbox Code Playgroud)

mysql sqlalchemy sqlalchemy-migrate python-3.x

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

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
查看次数

如何使用 sqlalchemy-migrate 将列类型从字符变化更改为整数

我正在使用 sqlalchemy-migrate 来更改 Postgre SQL 数据库中表中一列的类型。我正在使用的升级脚本是:

# -*- cofing: utf-8 -*-

from sqlalchemy import MetaData, Table, Column, String, Integer
from migrate import changeset


metadata = MetaData()


def upgrade(migrate_engine):
    # ALTER TABLE courses ALTER COLUMN number SET DATA TYPE character varying;
    metadata.bind = migrate_engine
    courses = Table('courses', metadata, Column("number", Integer), extend_existing=True)
    courses.c.number.alter(type=String)


def downgrade(migrate_engine):
    # ALTER TABLE courses ALTER COLUMN number SET DATA TYPE integer;
    metadata.bind = migrate_engine
    courses = Table('courses', metadata, Column("number", String), extend_existing=True)
    courses.c.number.alter(type=Integer, cast='numeric')
Run Code Online (Sandbox Code Playgroud)

升级部分似乎工作,但降级总是失败并出现以下错误:

sqlalchemy.exc.ProgrammingError: (ProgrammingError) column …
Run Code Online (Sandbox Code Playgroud)

python postgresql sqlalchemy sqlalchemy-migrate

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

Flask中的一对一关系

我正在尝试使用SqlAlchemy在Flask中创建一对一的关系.我按照上一篇文章进行了操作,并创建了以下类:

class Image(db.Model):
    __tablename__ = 'image'
    image_id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(8))

class Blindmap(db.Model):
    __tablename__ = 'blindmap'
    module_id = db.Column(db.Integer, primary_key = True)
    image_id = db.Column(db.Integer, ForeignKey('image.image_id'))
Run Code Online (Sandbox Code Playgroud)

虽然它可以将模型迁移到sqlite3数据库,但是当我尝试创建一个单独的对象通知另一个类的值为image_id时,我有一个错误.例如:

image1 = Image(image_id=1, name='image1.png')
blindmap1 = Blindmap(module_id=1, image_id=1)
Run Code Online (Sandbox Code Playgroud)

而我所遇到的错误就是随之而来的错误.我不太清楚这个完整性错误是什么.我还尝试在创建blindmap1时插入对象本身,但没有成功.

======================================================================
ERROR: test_commit_blindmap (__main__.TestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "tests.py", line 183, in test_commit_blindmap
  blindmap1.add_label(label1)
File "/home/thiago/Documents/ANU/MEDGg1/MEDG/LAWA/2014/trunk/app/models.py", line 325,   in add_label
db.session.commit()
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/scoping.py", line 150, in do
  return getattr(self.registry(), name)(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 776, …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy sqlalchemy-migrate flask flask-sqlalchemy

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