小编jav*_*vex的帖子

SQLAlchemy:创建与重用会话

只是一个简单的问题:SQLAlchemy 谈到调用sessionmaker()一次,但Session()每次需要与数据库通信时调用结果类.对我来说,这意味着第二个我会做我的第一个session.add(x)或类似的东西,我会先做

from project import Session
session = Session()
Run Code Online (Sandbox Code Playgroud)

我到目前为止所做的是session = Session()在我的模型中进行一次调用,然后始终在我的应用程序中的任何位置导入相同的会话.由于这是一个Web应用程序,这通常意味着相同(执行一个视图).

但差异在哪里?在我的功能完成之前,一直使用一个会话反对我的数据库使用它然后在我想要与我的数据库交谈时创建一个新会话的缺点是什么?

如果我使用多个线程,我会得到它,每个线程应该得到自己的会话.但是使用scoped_session(),我已经确定问题不存在,是吗?

请澄清我的任何假设是否错误.

python sqlalchemy

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

UnicodeEncodeError:'ascii'编解码器不能编码字符[...]

我从官方文档中读到了关于UnicodeHOWTO以及一篇完整,非常详细的文章.我仍然不明白为什么它会抛出这个错误.

这是我尝试的内容:我打开一个包含ASCII范围内的字符的XML文件(但在允许的XML范围内).我这样做cfg = codecs.open(filename, encoding='utf-8, mode='r')运行良好.查看字符串repr()也会显示一个unicode字符串.

现在我继续读下去parseString(cfg.read().encode('utf-8').当然,我的XML文件以此开头:<?xml version="1.0" encoding="utf-8"?>.虽然我认为它不相关,但我也为我的python脚本定义了utf-8,但由于我不直接在其中编写unicode字符,所以这不应该适用于此.以下行from __future__ import unicode_literals也是如此:它也在开头.

接下来我将生成的Object传递给我自己的类,在那里我将标签读入这样的变量:xmldata.getElementsByTagName(tagName)[0].firstChild.data并将其分配给我的类中的变量.

现在最完美的是那些命令(obj是类的一个实例):

for element in obj:
    print element
Run Code Online (Sandbox Code Playgroud)

这个命令也可以工作:

print obj.__repr__()
Run Code Online (Sandbox Code Playgroud)

我定义__iter__()了在__repr__()使用典型的printf 时只产生每个变量:"%s" % self.varname

两个命令都打印完美,可以输出unicode字符.什么不起作用是这样的:

print obj
Run Code Online (Sandbox Code Playgroud)

现在我被卡住了,因为这会引起可怕的

UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 47:
Run Code Online (Sandbox Code Playgroud)

那我错过了什么?我究竟做错了什么?我正在寻找一个通用的解决方案,我总是希望将字符串作为unicode处理,只是为了避免任何可能的错误并编写兼容的程序.

编辑:我也定义了这个:

def __str__(self):
    return self.__repr__()
def __unicode__(self):
    return self.__repr__()
Run Code Online (Sandbox Code Playgroud)

从文档我得到了这个

python unicode

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

分离SQLAlchemy实例,以便不进行刷新

我想从我的会话中分离一个类的实例,但它仍然可以读取(不发出查询).我已经扫描了几天的文档,但我尝试的每一种方法都会导致这个消息

DetachedInstanceError: Instance <MyModel at 0x36bb190> is not bound to a Session;
attribute refresh operation cannot proceed
Run Code Online (Sandbox Code Playgroud)

我正在使用zope.sqlalchemyPyramid中的事务管理器.我希望在提交事务我的对象可用.我只需要它来读取"缓存"值,即在提交事务之前在其中的值.

我能弄清楚的唯一方法是包装类(或属性本身),然后手动跟踪更改(我可以这样做,但它真的很难看,而且根本不是pythonic).

那么有什么方法可以阻止SQLAlchemy尝试刷新这些值?

作为一个后备,我甚至可以只返回None,只要在事务提交后没有抛出上述错误

python sqlalchemy pyramid

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

打印obj和print obj .__ str __()之间的Python差异[至少用Unicode?]

我被告知要调用print obj将调用obj.__str__()哪个将返回一个字符串以打印到控制台.现在我遇到了Unicode的问题,我无法打印任何非ascii字符.我得到了典型的"ascii超出范围"的东西.

在尝试以下工作时:

print obj.__str__()
print obj.__repr__()
Run Code Online (Sandbox Code Playgroud)

两个函数完全相同(__str__()只返回self.__repr__()).什么没有奏效:

print obj
Run Code Online (Sandbox Code Playgroud)

仅在使用ascii范围之外的字符时才会出现此问题.最终的解决方案是以下内容__str__():

return self.__repr__().encode(sys.stdout.encoding)
Run Code Online (Sandbox Code Playgroud)

现在它适用于所有部件.我现在的问题是:区别在哪里?为什么现在有用?如果没有任何效果我会得到,为什么现在这样.但为什么只有顶部工作,而不是底部.

操作系统是Windows 7 x64,带有默认的Windows命令提示符.此外,报告编码cp850.这是理解python的一般问题.我的问题已经解决了,但我并不是百分之百满意,主要是因为现在调用str(obj)会产生一个不按我想要的方式编码的字符串.

# -*- coding: utf-8 -*- 
class Sample(object):

    def __init__(self):
        self.name = u"üé"

    def __repr__(self):
        return self.name

    def __str__(self):
        return self.name

obj = Sample()
print obj.__str__(), obj.__repr__(), obj
Run Code Online (Sandbox Code Playgroud)

删除最后一个obj,它的工作原理.保持它,它崩溃了

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)

python unicode

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

Git在pull上删除了未跟踪的文件

我在计算机上创建了一个git存储库并将其推送到我的服务器.然后我进入另一台应该与存储库内容合并的计算机上的文件夹.

以下是我执行的确切步骤(我将其复制):在第一个存储库中:

git init
git remote add origin *repo adress*
git remote update
echo "abc" > a
git add a
git commit -a -m "Intial commit"
git push --set-upstream origin master
Run Code Online (Sandbox Code Playgroud)

在第二个(文件被删除的那个):

git init
echo "def" > b
git add b
git remote add origin *repo adress*
git remote update
git pull origin master
Run Code Online (Sandbox Code Playgroud)

我期望发生的是git将拉出这些文件然后我可以提交我的本地文件并将其推回.但现在我的本地文件已经消失了.git真的只是在没有警告的情况下删除本地文件(我没有使用任何强制选项或类似的)?

有没有可能让他们回来,或者这是预期和预期的行为,只是删除未跟踪的文件?

产量只是git status说:

# On branch master
nothing to commit, working directory clean
Run Code Online (Sandbox Code Playgroud)

我只是用测试存储库重新定义了这些步骤,它按照描述进行:文件"a"被拉入第二个存储库,但是文件"b"没有消失(只有一个被'ls'显示).

git

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

何时使用回拨功能?

你什么时候使用回调函数?我知道它们是如何工作的,我已经看到它们在使用中,我已经多次使用过它们.

来自C世界的一个例子是libcurl依赖回调来进行数据检索.

一个相反的例子是OpenSSL:在我使用它的地方,我使用了参数:

ret = somefunc(&target_value);
if(ret != 0)
    //error case
Run Code Online (Sandbox Code Playgroud)

我想知道什么时候使用哪个?回调只对异步内容有用吗?我目前正在设计我的应用程序的API,我想知道是使用回调还是只是一个out参数.在引擎盖下,它将使用libcurl和OpenSSL作为它构建的主库,参数"返回"是OpenSSL数据类型.

我没有看到回调对返回有什么好处.这只是有用的,如果我想以任何方式处理数据而不是仅仅回馈它?但后来我可以处理返回的数据.区别在哪里?

c callback

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

如何将stat输出转换为unix权限字符串

如果你运行os.stat(path)一个文件,然后获取它的st_mode参数,你怎么从那里得到这样的字符串:rw-r--r--从Unix世界知道?

python

7
推荐指数
2
解决办法
4143
查看次数

编写扩展时如何在 Python 和 C 之间传递空指针?

我今天开始了我的第一个 Python 扩展,只是作为练习围绕 C 库创建了一个非常小的包装器。与 C 库一样,您从一个生成处理程序的初始化函数开始。您可以将该处理程序传递给函数,然后将其传递给释放内存的清理函数。

当我开始编写包装器时,我基本上希望有一种方法可以从 python 调用每个本机 C 函数。很快我就遇到了一个问题,我需要将一个任意指针从 C 返回到 Python,只是为了在另一个函数中再次将它从那里返回给 C。我不关心它的外观,因为我不在 Python 中使用它,我只是存储它并传递它。

那么如何在 Python 和 C 之间传递一个空指针呢?

请注意:我知道不建议使用扩展系统编写这么小的包装器,而是使用 ctypes 和朋友。这只是为了现在的练习。

c python cpython

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

sqlalchemy timedelta 属性

我需要在表的列中保存时间间隔。基于: http: //docs.sqlalchemy.org/en/rel_0_8/core/types.html

\n\n

我可以使用Interval类型。我的数据库是SQLite,我不太明白文档中的这个描述:

\n\n
"The Interval type deals with datetime.timedelta objects. In PostgreSQL, the \nnative INTERVAL type is used; for others, the value is stored as a date which \nis relative to the \xe2\x80\x9cepoch\xe2\x80\x9d (Jan. 1, 1970)."\n
Run Code Online (Sandbox Code Playgroud)\n\n

谁能告诉我我应该怎么做?

\n

datetime sqlalchemy timedelta

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

为什么我的 zsh tab 在命令上完成速度很慢,但在目录上却没有?

我正在使用 zsh 并打开完成功能。当我尝试制表符完成时,有时命令会挂起很长时间。几秒钟后,它完成并正确呈现我的选项。另一方面,如果我用 Ctrl-C 中断它,我会收到以下消息:

Killed by signal in _path_commands after 2s
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用制表符完成目录(例如在 中ls),它工作得很好,没有延迟。

请注意,我正在使用 WSL2 在 Windows 上运行,尽管我依稀记得它也发生在其他系统上。还没有回去确认,但是当我刚刚在我的服务器上测试时,我无法在那里重现它,所以这与环境有关。

zsh zsh-completion

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