小编Dra*_*els的帖子

使用不同的python安装virtualenv时断言错误

我的服务器有Python2.5我想跳到最新的Python(在我的情况下是2.7.x).我从源代码编译python,我下载了最新的virtualenv(1.5.1).

现在基本上我想做的事情:

./packages/virtualenv/virtualenv.py --python=packages/Python-2.7/python env/
Run Code Online (Sandbox Code Playgroud)

打字:

./packages/virtualenv/virtualenv.py
Run Code Online (Sandbox Code Playgroud)

规定:

1.5.1
Run Code Online (Sandbox Code Playgroud)

打字时:

packages/Python-2.7/python
Run Code Online (Sandbox Code Playgroud)

规定:

Python 2.7 (r27:82500, Nov 21 2010, 23:19:15) 
[GCC 4.3.2] on linux2
(cut help mesage)
>>>
Run Code Online (Sandbox Code Playgroud)

然而,运行virutalenv导致:

AssertionError:文件名/packages/Python-2.7/Lib/os.py不以任何这些前缀开头:['/ usr/local']

无论它意味着什么,无论我是什么,或者我没有做错.

PS虽然构建env + python我的问题是:我如何解决这个问题创建一个自定义构建Python的virtualenv环境?

python virtualenv

24
推荐指数
2
解决办法
8179
查看次数

Sqlalchemy,原始查询和参数

我正在尝试使用sqlalchemy执行原始sql查询,并想知道什么是"正确"的方法来做到这一点.

我的查询如下(现在):

db.my_session.execute(
    """UPDATE client SET musicVol = {}, messageVol = {}""".format(
    music_volume, message_volume))
Run Code Online (Sandbox Code Playgroud)

我不喜欢的是字符串格式化和缺少任何参数处理(你好对music_volume中的引号:-D).

我试着按照这个答案:

如何在SQLAlchemy-flask应用程序中执行原始SQL

应用我读到的内容后,我的代码如下:

db.my_session.execute(
    "UPDATE client SET musicVol = :mv , messageVol = :ml", mv=music_volume, ml=message_volume)
Run Code Online (Sandbox Code Playgroud)

但是我收到的错误是mv和ml是无法识别的参数.

如果我将我的代码段更改为此代码,则可以:

db.my_session.execute(
    "UPDATE client SET musicVol = :mv , messageVol = :ml", {mv: music_volume, ml: message_volume})
Run Code Online (Sandbox Code Playgroud)

最后,my_session在名为db.py的文件中启动:

engi = sqlalchemy.create_engine(
    'mysql://{user}:{passwd}@{host}/{db}'.format(
        host=settings.HOST,
        user=settings.USER,
        passwd=settings.PASS,
        db=settings.DB_NAME), execution_options={
        'autocommit': True,
    })

my_session = sqlalchemy.orm.scoped_session(sqlalchemy.orm.sessionmaker(bind=engi), scopefunc=os.getpid)
sqlalchemy.orm.scoped_session.configure(my_session, autocommit=True)
Run Code Online (Sandbox Code Playgroud)

我想知道的是为什么回答上面链接和这部分文档:

http://docs.sqlalchemy.org/en/rel_0_9/core/tutorial.html#using-text

对我实际工作的内容显示略有不同的解决方案.

如果我的方法是一个去.

python mysql sql sqlalchemy

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

Sqlalchemy如何清除查询中的所有过滤器

问题。

我有这样的疑问:

qr = Session.query(models.User).filter(models.User.email == email)
Run Code Online (Sandbox Code Playgroud)

我想要做的是创建 qr2 并删除所有过滤器,在我的情况下,它相当于:

qr2 = Session.query(models.User) 
Run Code Online (Sandbox Code Playgroud)

好的解决方案可能是基于旧查询的新查询,但没有过滤器或修改旧查询。

为什么有人可能需要这个。

想象一下,您有一个复杂的查询,需要构建 3 个模块和 4k 行。您在小函数中得到的是查询对象(一个实例)。您不知道选择了哪些模型,也不知道查询的真正有效负载是什么。您知道您想要修改该查询以使其根本没有任何过滤器。

建议/解决方案?

python orm sqlalchemy

6
推荐指数
0
解决办法
1041
查看次数

具有特定列的 SqlAlchemy 2.x 使 scalars() 返回非 orm 对象

这个问题可能是我不理解(新)sqlalchemy 的架构,通常我使用这样的代码:

query = select(models.Organization).where(
    models.Organization.organization_id == organization_id
)
result = await self.session.execute(query)

return result.scalars().all()
Run Code Online (Sandbox Code Playgroud)

工作正常,我得到了模型列表(如果有的话)。

对于仅包含特定列的查询:

query = (
    select(
        models.Payment.organization_id,
        models.Payment.id,
        models.Payment.payment_type,
    )
    .where(
        models.Payment.is_cleared.is_(True),
    )
    .limit(10)
)

result = await self.session.execute(query)

return result.scalars().all()
Run Code Online (Sandbox Code Playgroud)

我只得到第一行第一列。似乎相同: https: //docs.sqlalchemy.org/en/14/core/connections.html ?highlight=scalar#sqlalchemy.engine.Result.scalar

到目前为止,我的理解是,在新的 sqlalchemy 中,我们应该始终调用scalars()查询,如下所述:https: //docs.sqlalchemy.org/en/14/changelog/migration_20.html#migration-orm-usage

但对于特定的列,我们似乎根本不能使用 scalars() 。更令人困惑的是,result.scalars()返回sqlalchemy.engine.result.ScalarResult具有 fetchmany()、fechall() 以及其他我无法以任何有意义的方式迭代的方法。

我的问题是,我不明白什么?

python sqlalchemy

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

如何将unicoded dict转换为字符串

我的问题如下.我们有dict,其所有键和值都是unicode,例如:

ab = {
    u'a': u'A',
    u'b': u'B',
    u'c': u'C',
}
Run Code Online (Sandbox Code Playgroud)

我想将其转换为字符串.当我这样做时显然:

str(ab)
Run Code Online (Sandbox Code Playgroud)

我会收到:

"{u'a': u'A', u'c': u'C', u'b': u'B'}"
Run Code Online (Sandbox Code Playgroud)

如果我做:

unicode(ab)
Run Code Online (Sandbox Code Playgroud)

我会收到:

u"{u'a': u'A', u'c': u'C', u'b': u'B'}"
Run Code Online (Sandbox Code Playgroud)

我的预期结果是:

"{'a': 'A', 'c': 'C', 'b': 'B'}"
Run Code Online (Sandbox Code Playgroud)

目前我发现,如果我执行json.dump,它会在每个键和值之前将其正确转换为字符串而不需要额外的"u",但它也会将True更改为true和其他javascript方言差异.

任何解决方法不同于在数据结构上递归迭代?

python type-conversion

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

Python signal.signal 是否阻止传播?

所以我有这个代码(部分取自python文档):

import signal

def handler(signum, frame):
    print 'Signal handler called with signal', signum

s = signal.signal(signal.SIGINT, handler)

some_fancy_code() # this code is using subprocess.Popen() to call another script

singal.signal(signal.SIGINT, s)
Run Code Online (Sandbox Code Playgroud)

我现在发现,如果我在程序中执行 Ctrl+C,它会正确输入该处理程序并进行打印。现在,我的想法是,在收到 Ctrl+C 后,我的处理程序将抑制默认处理程序,因此例如我的 subprocess.Popen 将不会收到 KeyboardInterrupt 信号。但这种情况并非如此。

但是当我们用“signal.SIG_IGN”替换“handler”时,这种传播永远不会发生。修改后的片段:

import signal

s = signal.signal(signal.SIGINT, signal.SIG_IGN)

some_fancy_code() # this code is using subprocess.Popen() to call another script

singal.signal(signal.SIGINT, s)
Run Code Online (Sandbox Code Playgroud)

这是因为 SIG_IGN 是用语言本身编写的某种“神奇”信号吗?或者也许有一种方法可以在我自己的处理程序中进行类似的抑制?

在阅读了一些有关堆栈溢出的问题后,我有点困惑。如果有人能为我解释为什么行为如此不同。

python signals interrupt

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

关于Fedora配置错误的Supervisord

我正在尝试在我的Fedora 17上安装supervisor,使用此链接作为参考:

https://www.digitalocean.com/community/articles/how-to-install-and-manage-supervisor-on-ubuntu-and-debian-vps

它工作得很好,除了一个小问题(我相信).

保存在/etc/supervisor/conf.d/long_script.conf中的脚本的简单配置看起来像这样(...)

我的问题是,我只有文件/目录:

/etc/supervisord/
/etc/supervisord.conf
Run Code Online (Sandbox Code Playgroud)

我试图在/ etc/supervisord /下创建conf.d目录.我已将配置文件放入/etc/supervisord/conf.d/和/ etc/supervisord /以及/ etc/sueprvisor /.

尽管我在发布命令时努力:

supervisortctl reread
Run Code Online (Sandbox Code Playgroud)

我收到:

No config updates to processes
Run Code Online (Sandbox Code Playgroud)

任何人都知道我可能做错了什么?提前致谢.

fedora supervisord

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