我的服务器有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环境?
我正在尝试使用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
对我实际工作的内容显示略有不同的解决方案.
如果我的方法是一个去.
问题。
我有这样的疑问:
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 行。您在小函数中得到的是查询对象(一个实例)。您不知道选择了哪些模型,也不知道查询的真正有效负载是什么。您知道您想要修改该查询以使其根本没有任何过滤器。
建议/解决方案?
这个问题可能是我不理解(新)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() 以及其他我无法以任何有意义的方式迭代的方法。
我的问题是,我不明白什么?
我的问题如下.我们有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文档):
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 是用语言本身编写的某种“神奇”信号吗?或者也许有一种方法可以在我自己的处理程序中进行类似的抑制?
在阅读了一些有关堆栈溢出的问题后,我有点困惑。如果有人能为我解释为什么行为如此不同。
我正在尝试在我的Fedora 17上安装supervisor,使用此链接作为参考:
它工作得很好,除了一个小问题(我相信).
保存在/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)
任何人都知道我可能做错了什么?提前致谢.
python ×6
sqlalchemy ×3
fedora ×1
interrupt ×1
mysql ×1
orm ×1
signals ×1
sql ×1
supervisord ×1
virtualenv ×1