小编Dag*_*ahl的帖子

Alembic:使用USING改变列类型

我正在尝试使用alembic将SQLAlchemy PostgreSQL ARRAY(文本)字段转换为我的一个表列的BIT(vary = True)字段.

该列目前定义为:

cols = Column(ARRAY(TEXT), nullable=False, index=True)
Run Code Online (Sandbox Code Playgroud)

我想将其更改为:

cols = Column(BIT(varying=True), nullable=False, index=True)
Run Code Online (Sandbox Code Playgroud)

默认情况下似乎不支持更改列类型,因此我手动编辑了alembic脚本.这就是我目前所拥有的:

def upgrade():
    op.alter_column(
        table_name='views',
        column_name='cols',
        nullable=False,
        type_=postgresql.BIT(varying=True)
    )


def downgrade():
    op.alter_column(
        table_name='views',
        column_name='cols',
        nullable=False,
        type_=postgresql.ARRAY(sa.Text())
    )
Run Code Online (Sandbox Code Playgroud)

但是,运行此脚本会出现错误:

Traceback (most recent call last):
  File "/home/home/.virtualenvs/deus_lex/bin/alembic", line 9, in <module>
    load_entry_point('alembic==0.7.4', 'console_scripts', 'alembic')()
  File "/home/home/.virtualenvs/deus_lex/local/lib/python2.7/site-packages/alembic/config.py", line 399, in main
    CommandLine(prog=prog).main(argv=argv)
  File "/home/home/.virtualenvs/deus_lex/local/lib/python2.7/site-packages/alembic/config.py", line 393, in main
    self.run_cmd(cfg, options)
  File "/home/home/.virtualenvs/deus_lex/local/lib/python2.7/site-packages/alembic/config.py", line 376, in run_cmd
    **dict((k, getattr(options, k)) for k in kwarg)
  File "/home/home/.virtualenvs/deus_lex/local/lib/python2.7/site-packages/alembic/command.py", line …
Run Code Online (Sandbox Code Playgroud)

postgresql sqlalchemy alembic

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

修补函数的__call__

我需要在测试中修补当前的日期时间.我正在使用这个解决方案:

def _utcnow():
    return datetime.datetime.utcnow()


def utcnow():
    """A proxy which can be patched in tests.
    """
    # another level of indirection, because some modules import utcnow
    return _utcnow()
Run Code Online (Sandbox Code Playgroud)

然后在我的测试中我做了类似的事情:

    with mock.patch('***.utils._utcnow', return_value=***):
        ...
Run Code Online (Sandbox Code Playgroud)

但今天我想到了一个想法,我可以通过修补__call__功能utcnow而不是额外的功能来简化实现_utcnow.

这对我不起作用:

    from ***.utils import utcnow
    with mock.patch.object(utcnow, '__call__', return_value=***):
        ...
Run Code Online (Sandbox Code Playgroud)

如何优雅地做到这一点?

python time mocking python-mock

21
推荐指数
2
解决办法
2559
查看次数

如何让Ansible检查只在剧本中运行一次?

为了防止使用过时的剧本,我想确保在Ansible被允许修改服务器上的任何内容之前我有一个git checkout的更新副本.

这就是我试图这样做的方式.此操作位于所有剧本包含的文件中:

- name: Ensure local git repository is up-to-date
  local_action: git pull
  register: command_result
  failed_when: "'Updating' in command_result.stdout"
Run Code Online (Sandbox Code Playgroud)

问题是这个命令对Ansible连接的每个节点运行一次,而不是每个playbook运行一次.我怎么能避免这种情况?

git ansible

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

重命名码头机器

如何重命名docker-machine机器?我无法使用docker-machine --help或在子命令docs中找到它.

docker docker-machine

20
推荐指数
2
解决办法
9241
查看次数

无法通过 pip 安装 xmlsec

pip install xmlsec在 macOS Big Sur 11.3.1 中运行时,我收到以下信息:

Building wheels for collected packages: xmlsec
  Building wheel for xmlsec (PEP 517) ... error
  ERROR: Command errored out with exit status 1:
   command: /Users/davidmasip/.pyenv/versions/3.9.9/bin/python3.9 /Users/davidmasip/.pyenv/versions/3.9.9/lib/python3.9/site-packages/pip/_vendor/pep517/in_process/_in_process.py build_wheel /var/folders/ff/3y2196b13bq0nbm3_ms25nyh0000gp/T/tmpm51b1yso
       cwd: /private/var/folders/ff/3y2196b13bq0nbm3_ms25nyh0000gp/T/pip-install-qm2a1dud/xmlsec_cd7a81ea26444cc4b8ae24acd3ec379d
  Complete output (65 lines):
  running bdist_wheel
  running build
  running build_py
  creating build
  creating build/lib.macosx-11.3-x86_64-cpython-39
  creating build/lib.macosx-11.3-x86_64-cpython-39/xmlsec
  copying src/xmlsec/py.typed -> build/lib.macosx-11.3-x86_64-cpython-39/xmlsec
  copying src/xmlsec/tree.pyi -> build/lib.macosx-11.3-x86_64-cpython-39/xmlsec
  copying src/xmlsec/__init__.pyi -> build/lib.macosx-11.3-x86_64-cpython-39/xmlsec
  copying src/xmlsec/constants.pyi -> build/lib.macosx-11.3-x86_64-cpython-39/xmlsec
  copying src/xmlsec/template.pyi -> build/lib.macosx-11.3-x86_64-cpython-39/xmlsec
  running build_ext
  building 'xmlsec' extension
  creating …
Run Code Online (Sandbox Code Playgroud)

python macos homebrew pip xmlsec

15
推荐指数
2
解决办法
8622
查看次数

使用任意gulpfile名称运行gulp(不是gulpfile.js)

我的gulpfile中有一个与其他任务隔离的特定任务,并且永远不需要在构建过程的其余部分中运行.我想将它放在一个单独的gulpfile中并自行执行.

如何使用gulp具有自定义名称的gulpfile?

作为Gulp的文档冒充的入门文档将我引导到一个未提及CLI的API文档.我的搜索尝试参数gulp,主要是如何将命令行参数放入gulp任务中的结果.

实际的用例是在Docker容器中提取可翻译的字符串,我不想使用不必要的node.js包.

javascript command-line-interface node.js docker gulp

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

Python namedtuple作为apply_async(..)回调的参数

我正在写一个简短的程序,我想异步调用一个函数,这样它就不会阻塞调用者.为此,我正在使用Poolpython的multiprocessing模块.

在异步调用的函数中,我想返回一个namedtuple以适应我程序其余部分的逻辑,但我发现a namedtuple似乎不是从生成的进程传递给回调的受支持类型(可能是因为它不能被腌制).这是问题的最低限度.

from multiprocessing import Pool
from collections import namedtuple

logEntry = namedtuple("LogEntry", ['logLev', 'msg'])

def doSomething(x):
    # Do actual work here
    logCode = 1
    statusStr = "Message Here"
    return logEntry(logLev=logCode, msg=statusStr)

def callbackFunc(result):
    print(result.logLev)
    print(result.msg)

def userAsyncCall():
    pool = Pool()
    pool.apply_async(doSomething, [1,2], callback=callbackFunc)

if __name__ == "__main__":
    userAsyncCall() # Nothing is printed

    # If this is uncommented, the logLev and status are printed as expected:
    # y = logEntry(logLev=2, msg="Hello World") …
Run Code Online (Sandbox Code Playgroud)

python python-multithreading python-2.7 python-3.x

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

当需要向具有数百万行的表添加列时,Postgres比MySql更好吗?

我们遇到Mysql问题.当我四处搜寻时,我看到很多人遇到同样的问题.

我加入了一个产品,其中数据库有一些表,行数多达1.5亿行.我们的问题的一个例子是这些表中的一个具有超过30列,并且其中大约一半不再使用.当试图删除列或重命名列时,mysql想要复制整个表并重命名.有了这么多的数据,这需要花费很多时间来完成,而且网站几乎一直都处于脱机状态.这只是改进模式的几次大型迁移中的第一次.这些并非常规.我继承了很多清理工作.

我试着去查看人们是否与Postgres有同样的问题,我发现几乎没有什么可以比较这个问题.这是因为Postgres在这方面要好得多,或者只是少用人使用postgres?

mysql postgresql

8
推荐指数
3
解决办法
2267
查看次数

获取Ember DS.Model类的服务器URL

在我的模型中使用Ember Data时,在某些情况下我需要解决数据限制并访问服务器上的其他准静态URL.

例如,我有一个Feed记录数据流的对象.为了访问模型,我有一个RESTful端点:

/feeds/:feed_id
Run Code Online (Sandbox Code Playgroud)

为了开始和停止录制Feed,我需要发送PATCH一个网址,如:

/feeds/:feed_id?update_action=start
Run Code Online (Sandbox Code Playgroud)

随后我可以重新加载我的模型并查看其中反映的变化.

在这种情况下,我需要访问$.ajax,并且URL与Ember将使用的URL相同.但是,我无法弄清楚如何从Ember中获取这些信息.

到目前为止,我能做的最好的事情是:

DS.Model.reopen

  rootForModel: Ember.computed( ->
    @.store.adapterForType(@).serializer.rootForType(@.constructor)
  )

  pluralRootForModel: Ember.computed( ->
    @.store.adapterForType(@).serializer.pluralize(@get("rootForModel"))
  )
Run Code Online (Sandbox Code Playgroud)

这样App.FeedItem我可以这样做:

this.get("rootForModel") # feed_item
this.get("pluralRootForModel") # feed_items
Run Code Online (Sandbox Code Playgroud)

而且我猜这将与适配器等中的任何设置保持同步.

随后,我可以这样打电话:

$.ajax
  url: @get("pluralRootForModel") + "/" + @get("id")
  data:
    update_action: "start"
  type: "PATCH"
Run Code Online (Sandbox Code Playgroud)

这完全是在左场吗?是否有更直接的方法来撰写这些网址?

另一个(相关问题)是获取给定模型的下划线名称.

App.MyModelController  => my_model_controller
Run Code Online (Sandbox Code Playgroud)

我做过类似的事情:

Ember.Object.reopenClass

###*
 * The underscored name for this.
 * i.e. App.MyClass -> my_class
 * From an instance, use this.constructor.underscored_class_name()
 * @return {String} This classname, underscored. …
Run Code Online (Sandbox Code Playgroud)

ember.js ember-data

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

使用sqlalchemy数据库的PyQt应用程序

我试图创建一个PyQt应用程序,并将数据存储到数据库中.我想使用sqlachemy来访问我的数据并使用PyQt中的模型显示数据.

在这个例子中,我用一个组合框来显示我的数据.

我的代码"工作"不好,因为每次点击我的组合框时,模型都会检查数据库数千次,这使得它非常迟钝.

这样做的"规范方法"是什么?

我在Windows下使用Python 3.4和PyQt 4.我在Python-Sqlalchemy-PyQt-english中的技巧非常低.

#!/usr/bin/env python3
# -*- coding: utf-8 -*- 

import sys
import sqlalchemy
from sqlalchemy.ext.declarative import declarative_base

from PyQt4 import QtCore, QtGui, uic

# My base structure

base = declarative_base()

class User(base):
    __tablename__ = "users"
    id_ = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True)

    name = sqlalchemy.Column(sqlalchemy.String(20))

    def __repr__(self):
        return "<User(id='%s', name='%s')>" % (self.id_, self.name)

# Creating my base and my session
engine = sqlalchemy.create_engine("sqlite:///my_db.db")
base.metadata.create_all(engine)

DBsession = sqlalchemy.orm.sessionmaker(bind=engine)
session = DBsession()

# My model, i …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy pyqt pyqt4

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