我在Gentoo下使用"vanilla"Pyramid 1.4,我希望对我的表进行更改并提交它们而不必删除表(及其所有数据),然后重新创建它.我听说过这个解决方案是架构迁移.
作为Django的长期用户,我一直在使用django-south,但现在我正在使用Pyramid我找不到任何方法来处理迁移.我读过sqlalchemy-migrate,看起来非常好,但我不确定如何让它与金字塔一起工作.
有没有办法在Pyramid 1.4中处理模式迁移?如果使用sqlalchemy-migrate是明智的选择,我如何让它与金字塔一起使用?
干杯.
python sqlalchemy database-migration sqlalchemy-migrate pyramid
我有以下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-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'时,我得到并且错误: …
我目前正在尝试理解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) 我正在使用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)
我将其从重命名为contract,contracts并进行以下迁移:
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)
它删除旧表并创建一个新表。我从未检查过其他迁移脚本,因为它们始终在不删除数据的情况下运行。
我有一个运行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,真) …
我是 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) 我按照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) 我正在使用 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) 我正在尝试使用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 ×8
sqlalchemy ×8
mysql ×2
alembic ×1
buildbot ×1
flask ×1
postgresql ×1
pyramid ×1
python-2.7 ×1
python-3.x ×1