想象一下,我有一个mysql游标和数据读取.数据量可能非常大,我想每次处理一行.
一个简单直接的方式可能是这样的:
while True:
row = cursor.fetchone()
if not row: break
.....
Run Code Online (Sandbox Code Playgroud)
但这看起来不太好,所以我想知道这种方式是否像想象的那样有效:
for row in iter(cursor.fetchall())
Run Code Online (Sandbox Code Playgroud)
我想知道的是:如果我使用这种iter(cursor.fetchall())方式,它是先获取所有数据还是一次只取一行?
任何想法都表示赞赏.
谢谢
我希望在django支持的Web应用程序中保持对第三方遗留数据库的持久连接.
我想保持Web应用程序和旧数据库之间的连接打开,因为为这个特殊的数据库创建新连接非常慢.
它不像通常的连接池,因为我需要存储每个Web用户的连接.用户"Foo"需要在Web服务器和旧版DB之间建立自己的连接.
到目前为止,我使用Apache和wsgi,但如果其他解决方案更合适,我可以改变.
到目前为止我使用django.在这里我也可以改变.但是痛苦会更大,因为已经有很多代码需要再次集成.
到目前为止,我使用Python.我想Node.js在这里会更合适,但改变的痛苦太高了.
当然需要某种超时.如果N分钟没有来自用户"Foo"的http请求,那么持久连接将需要关闭.
怎么能解决这个问题?
更新
我叫它,DB但它不是通过settings.DATABASES配置的数据库.这是一个奇怪的,传统的,不是广泛的类似DB的系统,我需要集成.
如果我现在有50个人在线使用网络应用程序,那么我需要有50个持久连接.每个用户一个.
用于连接到DB的代码
我可以在每个请求中执行此行:
strangedb_connection = strangedb.connect(request.user.username)
Run Code Online (Sandbox Code Playgroud)
但是这个操作很慢.使用连接很快.
当然strangedb_connection不能序列化,也不能存储在会话中:-)
我想在cron工作中发送邮件.邮件应包含指向我的应用程序的链接.
在cron作业中,我没有请求对象,也不能使用request.build_absolute_uri().
AFAIK的站点框架可以在这里提供帮助.但是没有给我协议(http vs https)?
我的应用程序是可重用的,有时会在http和有时在https网站上托管.
更新
我搜索一个常见的django方式.可以创建自定义设置,但首选django标准的解决方案.
是否有可能BadRequest在django中提出异常?
我已经看到你可以筹集404 [1].
用例:在helper方法中,我从request.GET加载一个json.如果json因为浏览器(IE)切断网址而被切断,我想提出一个匹配的异常.
BadRequest异常看起来合适,但到目前为止在django中似乎没有这样的异常.
在1.6中有一个SuspiciousOperation异常.但这与我的情况不符,因为它与安全无关.
当然,我可以尝试一下try ..除了在我的帮助方法中查看方法,但这不是DRY.
有人一个解决方案,我不需要try..exception围绕我的帮助方法的每次调用?
[1] https://docs.djangoproject.com/en/1.6/ref/exceptions/#django.core.urlresolvers.Resolver404
更新
代码示例:
def my_view(request):
data=load_data_from_request(request) # I don't want a try..except here: DRY
process_data(data)
return django.http.HttpResponse('Thank you')
def load_data_from_request(request):
try:
data_raw=json.loads(...)
except ValueError, exc:
raise BadRequest(exc)
...
return data
Run Code Online (Sandbox Code Playgroud) 如果使用带有"pip install -e ..."的git repo进行安装,则某些下划线会变为破折号.
有没有办法阻止这个?
我想自动化东西.我想要回购foo_bar,而~/src/foo_bar不是~/src/foo-bar.
如何在模拟中有条件地调用orignal方法?
在这个例子中,我只想伪造一个返回值if bar=='x'.否则我想调用原始方法.
def mocked_some_method(bar):
if bar=='x':
return 'fake'
return some_how_call_original_method(bar)
with mock.patch('mylib.foo.some_method', mocked_some_method):
do_some_stuff()
Run Code Online (Sandbox Code Playgroud)
我知道这有点奇怪.如果我想mylib.foo.some_method在侧面假装do_some_stuff()它应该是无条件的.some_method应该嘲笑所有(不是一些)呼叫.
在我的情况下,它是一个集成测试,而不是mylib.foo.some_method一个小的单元测试,并且是一种经常被使用的调度程序.在一个案例中,我需要伪造结果.
我使用Python 2.7,我知道我可以这样写:
with A() as a, B() as b:
do_something()
Run Code Online (Sandbox Code Playgroud)
我想提供一个方便的助手,两者都做.此助手的用法应如下所示:
with AB() as ab:
do_something()
Run Code Online (Sandbox Code Playgroud)
现在AB()应该做两件事:创建上下文A()并创建上下文B().
我不知道如何编写这个便利助手
我安装了pytest-mock并使用了一个模拟程序,我试图像补丁一样运行,但是我得到“类型错误:需要一个有效的目标来修补。你提供了‘返回 a + b’”
# test_capitalize.py
import time
def sum(a, b):
time.sleep(10)
return a + b
def test_sum(mocker):
mocker.patch('return a + b');
assertEqual(sum(2, 3), 9)
Run Code Online (Sandbox Code Playgroud) 在Python 2.7 os.makedirs()上缺少exist_ok.这仅适用于Python 3.
我知道这是一项有效的工作:
try:
os.makedirs(settings.STATIC_ROOT)
except OSError as e:
if e.errno != errno.EEXIST:
raise
Run Code Online (Sandbox Code Playgroud)
我可以创建一个自定义my_make_dirs()方法并使用它,而不是os.makedirs(),但这不是很好.
如果你被迫支持Python 2.7,最诡计多端的工作是什么?
AFAIK python-future或者6将无法帮到这里.
python ×8
django ×3
mocking ×2
cron ×1
cursor ×1
fetchall ×1
httpresponse ×1
mysql ×1
os.path ×1
pip ×1
pycharm ×1
pytest ×1
python-2.7 ×1
type-hinting ×1
url ×1
virtualenv ×1