我想通过使用Alembic将数据库的列类型从字符串更改为整数。如果我使用纯SQL,它可以实现以下目标:
alter table statistic_ticket alter column tags type bigint using tags::bigint;
但是当我像这样使用Alembic时:
import sqlalchemy as sa
def upgrade():
op.alter_column('statistic_ticket', 'tags', nullable = True, existing_type=sa.String(length
我正在修改一个模型(添加一个新列),并且我有一个相应的迁移文件。我的目标是通过向新列添加一些数据来扩展此迁移。
我试图通过添加我自己的sql代码来修改迁移文件,以实现我的目标。修改后的almebic文件示例包含如下代码:
# below is the only line added by alembic
op.add_column('sample_table', sa.Column('new_column', sa.UnicodeText(), nullable=True))
# below lines are my own
my_obj = MyClass()
我正在为一个flask+sqlalchemy项目使用alembic迁移,直到我尝试查询alembic中的模型,事情才会像预期的那样工作。
from models import StoredFile
def upgrade():
### commands auto generated by Alembic - please adjust! ###
op.add_column('stored_file', sa.Column('mimetype', sa.Unicode(length=32))
for sf in StoredFile.qu
我正在使用PostgreSQL和Alembic进行迁移。当我向我的用户表添加新列时,Alembic使用以下脚本生成了迁移:
from alembic import op
import sqlalchemy as sa
import random
def generate_toke():
return random.random()
def upgrade():
op.add_column('user', sa.Column('token', sa.String(), nullable=True ))
op.execute('s
我有一个简单的Flask-SQLAlchemy模型(使用事件侦听器来创建触发器):
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class Confirm(db.Model):
created = db.Column(db.DateTime, default=db.func.current_timestamp(), nullable=False)
modified = db.Column(db.DateTime, default=db.func.current_timestamp(), onupdate=db.
我想使用alembic从一个sqlalchemy模型迁移到另一个模型。初始模型如下所示:
from sqlalchemy.dialects.postgresql import JSONB
from sqlalchemy_utils import UUIDType
class Foo(db.Model):
__tablename__ = 'foo'
id = db.Column(UUIDType(binary=True), primary_key=True)
foo_field = db.Column(JSONB)
我想让foo_field不可为空:
c
假设数据库中有一些带有函数的触发器,如下所示: -- Insert a new entry into another table
-- every time a NEW row is inserted
CREATE FUNCTION trgfunc_write_log() RETURNS TRIGGER AS $$
BEGIN
INSERT INTO some_other_table (
-- some columns
meter_id,
date_taken,
temperature,
) values (
有没有人知道如何使用create_view函数通过alembic升级函数创建视图?例如,我们有:
CREATE VIEW myview AS
SELECT column_name(s)
FROM table_name
WHERE condition
现在我们想在alembic升级函数脚本中定义一个视图来创建'myview‘。如何实现这一点?
谢谢。
我有一个SQLAlchemy模型,像-
class UserFavPlace(db.Model):
# This model stores the feedback from the user whether he has
# faved a place or not
__tablename__ = u'user_fav_places'
id = db.Column(db.Integer, primary_key = True)
public_place_id = db.Column(db.Integer, db.ForeignKey(
我使用在数据库上执行DB迁移。我的迁移之一删除了许多冗余记录,删除后我想对数据库进行。
下面是我在迁移的upgrade()方法中尝试这样做的方法:
def upgrade():
# deleting records here using op.execute()...
op.execute("VACUUM")
当迁移运行时,它会失败,出现以下错误消息:
E sqlalchemy.exc.OperationalError:(sqlite3.OperationalError)不能从事务中清除E SQL: VACUUM (此错误的背景为:)`
该链接只提供
出于更好的判断,我决定将数据库中的主列从id重命名为key,因为我不想与Python的id函数冲突。
因为我使用的是SQLite后端,所以我设法通过使用来使用alembic重命名该列。
现在,当向我的模型添加新表时,alembic会设法检测到新表,然后崩溃,并显示以下内容:
sqlalchemy.exc.NoReferencedColumnError: Could not initialize target column for ForeignKey 'tests.id' on table 'runs': table 'tests' has no
我正在尝试创建一个函数索引(使用PostgreSQL函数lower())。使用Alembic创建表时出现以下错误:
sqlalchemy.exc.ProgrammingError: (ProgrammingError) column "lower" does not exist
'CREATE INDEX ix_cities_name ON cities (lower)' {}
代码如下:
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
app = Flask(__nam
我正在使用Alembic迁移工具在SQLAlchemy迁移中添加新的枚举成员。
SQLAlchemy使用Python原生Enum作为:
from enum import Enum
class MyEnum(Enum):
# Key and value names different to clarify they are separate
# concepts in Python
old = "OLD_VALUE"
new1 = "NEW1_VALUE"
new2 = "NEW2_VALUE"
然后:
我有一个问题,在运行升级命令与瓶迁移。最初,我试图一次修改三个表,然后它挂起,我把它缩小到一个特定的表(其他升级没有问题)。我没看到数据库上有锁。我正在使用Postgres,目前只是在开发环境中工作。迁移命令似乎运行良好,并生成upgrade方法,没有任何问题(请参阅代码)
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_column('equipment', 'criteria_notes')
# ### end A
我的alembic更新脚本用于添加新的postgis几何点,如下所示:
from alembic import op
import sqlalchemy as sa
import geoalchemy2 as ga
def upgrade():
op.add_column('stuff', sa.Column('my_location', ga.Geometry('POINT', management=True)))
def downgrade():
pass
当我通过
alembic upgrade head
出现以下错误
我的存储库可以在这里找到 ( alembic文件夹中的版本),我尝试使用自动生成迁移,
alembic revision --autogenerate -m "some message"
与表的创建无关,即空、降级和升级功能。我正确地配置了本地数据库。我怎么才能解决这个问题?
我的日志是这样的
INFO [alembic.migration] Context impl MySQLImpl.
INFO [alembic.migration] Will assume non-transactional DDL.
Target database is not up to da
我在django项目中使用alembic和virtualenv,我在path中创建了一个虚拟环境。
/ENV
/myproject
在我的项目中,我有一个信任/开发. in文件,其中我定义了alembic参数。
script_location = ../ENV/bin/alembic
当我试着跑alembic
alembic -c configs/development.ini upgrade head
我收到以下错误
The 'Mako' distribution was not found and is required by alembic
每次我更新我的模型,我必须删除和重新初始化数据库。
./manage.py db init,然后是初始./manage.py db migrate
工作,但随后的每个./manage.py db migrate都会失败,出现以下错误:
INFO [alembic.migration] Context impl SQLiteImpl.
INFO [alembic.migration] Will assume non-transactional DDL.
Traceback (most recent call last):
File "manage.py", line 110,