小编jmi*_*loy的帖子

何时使用MySQLdb关闭游标

我正在构建一个WSGI Web应用程序,我有一个MySQL数据库.我正在使用MySQLdb,它提供了执行语句和获取结果的游标.获取和关闭游标的标准做法是什么?特别是,我的游标应该持续多久?我应该为每笔交易获得一个新光标吗?

我相信你需要在提交连接之前关闭光标.查找不需要中间提交的事务集是否有任何显着优势,这样您就不必为每个事务获取新游标?获得新游标是否有很多开销,或者这不是什么大不了的事?

python mysql mysql-python

76
推荐指数
4
解决办法
8万
查看次数

打破或退出"with"声明?

我想with在某些条件下退出声明:

with open(path) as f:
    print 'before condition'
    if <condition>: break #syntax error!
    print 'after condition'
Run Code Online (Sandbox Code Playgroud)

当然,上述方法不起作用.有没有办法做到这一点?(我知道我可以改变这种情况:if not <condition>: print 'after condition'- 任何方式就像上面那样?)

python with-statement

34
推荐指数
6
解决办法
3万
查看次数

将大型csv转换为hdf5

我有一个100M行csv文件(实际上很多单独的csv文件)总共84GB.我需要将它转换为具有单个float数据集的HDF5文件.我在测试中使用了h5py而没有任何问题,但是现在我不能在没有内存耗尽的情况下完成最终的数据集.

如何在不必将整个数据集存储在内存中的情况下写入HDF5?我在这里期待实际代码,因为它应该非常简单.

我只是在研究pytables,但它看起来不像数组类(对应于HDF5数据集)可以迭代编写.同样,熊猫拥有read_csvto_hdf在它的方法io_tools,但我不能在同一时间加载整个数据集,这样将无法正常工作.也许你可以帮我用pytables或pandas中的其他工具正确解决问题.

python csv hdf5 pytables pandas

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

离子2页面改变事件

我想在每次页面更改时执行一些代码.

我可以ngOnDestroy为每个页面添加一个方法.似乎我可以使用Ionic 2页面生命周期钩子(例如ionViewDidUnload)获得完全相同的效果,但我没有费心去测试它.我宁愿在主app类中添加一个方法.

我看到你可以订阅Angular 2 路由器事件.如何翻译用于Ionic 2?我首先得到一个错误import { Router } from '@angular/router;:

TypeScript error: <path>/node_modules/@angular/router/src/common_router_providers.d.ts(9,55): Error TS2305: Module '"<path>/node_modules/@angular/core/index"' has no exported member 'NgModuleFactoryLoader'.
TypeScript error: <path>/node_modules/@angular/router/src/router.d.ts(14,39): Error TS2305: Module '"<path>/node_modules/@angular/core/index"' has no exported member 'NgModuleFactoryLoader'.
TypeScript error: <path>/node_modules/@angular/router/src/router_module.d.ts(9,10): Error TS2305: Module '"<path>/node_modules/@angular/core/index"' has no exported member 'ModuleWithProviders'.
Run Code Online (Sandbox Code Playgroud)

webpack配置

var path = require('path');


module.exports = {
  entry: [
    path.normalize('es6-shim/es6-shim.min'),
    'reflect-metadata',
    path.normalize('zone.js/dist/zone'),
    path.resolve('app/app.ts')
  ],
  output: {
    path: path.resolve('www/build/js'),
    filename: 'app.bundle.js',
    pathinfo: false …
Run Code Online (Sandbox Code Playgroud)

typescript ionic-framework ionic2 ionic3 angular

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

为什么MySQLdb Connection上下文管理器不关闭游标?

MySQLdb Connections有一个基本的上下文管理器,可以在enter上创建一个游标,在退出时回退或提交,并且隐式不会抑制异常.来自连接源:

def __enter__(self):
    if self.get_autocommit():
        self.query("BEGIN")
    return self.cursor()

def __exit__(self, exc, value, tb):
    if exc:
        self.rollback()
    else:
        self.commit()
Run Code Online (Sandbox Code Playgroud)

那么,有没有人知道为什么光标在退出时没有关闭?


起初,我认为这是因为关闭游标没有做任何事情,并且游标只有一个关闭方法来参考Python DB API(参见本答案的评论).但是,事实是关闭光标会烧掉剩余的结果集(如果有),并禁用光标.从光标源:

def close(self):
    """Close the cursor. No further queries will be possible."""
    if not self.connection: return
    while self.nextset(): pass
    self.connection = None
Run Code Online (Sandbox Code Playgroud)

在退出处关闭光标会很容易,所以我不得不假设它没有故意完成.另一方面,我们可以看到,当一个游标被删除时,无论如何它都会被关闭,所以我猜垃圾收集器最终会绕过它.我对Python中的垃圾收集知之甚少.

def __del__(self):
    self.close()
    self.errorhandler = None
    self._result = None
Run Code Online (Sandbox Code Playgroud)

另一个猜测是,您可能希望在with块之后重新使用光标.但我想不出你为什么需要这样做的任何理由.难道你不能总是在其上下文中使用游标,并且只为下一个事务使用单独的上下文吗?

要非常清楚,这个例子显然没有意义:

with conn as cursor:
    cursor.execute(select_stmt)

rows = …
Run Code Online (Sandbox Code Playgroud)

python mysql mysql-python contextmanager

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

为什么我的c程序突然使用30g的虚拟内存?

在顶部,我注意到我的c程序(使用CUDA 3.2)的虚拟大小为28g或更多(查看VIRT),从一开始就进行每次运行.这对我来说没有任何意义.常驻内存是有意义的,在我最大的数据集上只有大约2g.我知道在过去的某个时刻虚拟大小不是那么大,但我不确定何时发生了变化.

为什么我的进程会使用28g的虚拟内存(或者为什么top的VIRT会如此之大)?据我所知,VIRT包括可执行二进制文件(仅437K),共享库和"数据区".什么是"数据区"?如何找出共享库需要多少内存?那个过程总内存的其他元素呢?

/ proc/<pid>/smaps(1022行)的内容:http://pastebin.com/fTJJneXr

其中一个来自smaps的条目显示其中一个占其中的MOST,但没有标签......我怎么能找出这个"空白"条目有28gb?

200000000-900000000 ---p 00000000 00:00 0 
Size:           29360128 kB
Rss:                   0 kB
Pss:                   0 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:         0 kB
Private_Dirty:         0 kB
Referenced:            0 kB
Anonymous:             0 kB
Swap:                  0 kB
KernelPageSize:        4 kB
MMUPageSize:           4 kB
Locked:                0 kB
Run Code Online (Sandbox Code Playgroud)

-

ubuntu 11.04 64位
16 GB RAM

c linux memory virtual cuda

13
推荐指数
2
解决办法
2557
查看次数

如何在没有MySQL客户端的情况下直接访问MySQL InnoDB索引值?

a VARCHAR(255), b INT在InnoDB表中有一个列索引.给定两a,b对,我可以使用MySQL索引来确定ac程序中的对是否相同(即不使用strcmp和数字比较)?

  1. 存储在文件系统中的MySQL InnoDB索引在哪里?
  2. 可以从单独的程序中读取和使用吗?格式是什么?
  3. 如何使用索引来确定两个键是否相同?

注意:这个问题的答案应该是:a)提供一种访问MySQL索引的方法以完成这项任务,或者b)解释为什么不能以这种方式实际访问/使用MySQL索引.特定于平台的答案很好,我在使用Red Hat 5.8.


下面是这个问题的先前版本,它提供了更多的背景,但似乎分散了实际问题的注意力.我知道在MySQL中有其他方法可以完成这个例子,我提供了两个.这不是关于优化的问题,而是分解出许多不同动态生成的查询中存在的复杂性.

我可以使用子分组的子选择来完成我的查询,例如

SELECT c, AVG(max_val)
FROM (
    SELECT c, MAX(val) AS max_val
    FROM table
    GROUP BY a, b) AS t
GROUP BY c
Run Code Online (Sandbox Code Playgroud)

但我写了一个UDF,允许我用一个选择来做,例如

SELECT b, MY_UDF(a, b, val)
FROM table
GROUP by c
Run Code Online (Sandbox Code Playgroud)

这里的关键是,我穿过田野ab对UDF,和我手动管理a,b各组群.列a是一个varchar,所以这涉及strncmp到检查匹配的调用,但速度相当快.

但是,我有一个索引my_key (a ASC, b ASC).而不是手动检查a和b上的匹配,我可以访问并使用MySQL索引吗?也就是说,我可以在my_key中获取a,bc中给定行或对的索引值(在UDF内)吗?如果是这样,指数值是否会保证对任何值都是唯一的a,b

我想调用MY_UDF(a, b, val)然后(a,b)从UDF中查找c中的mysql索引值.

c mysql indexing innodb

10
推荐指数
2
解决办法
1877
查看次数

当我清除表单输入(在chrome中)时,导致这种长时间延迟的原因是什么?

摘要

清除表单输入中的文本会导致Chrome中出现长时间延迟(多秒).这似乎导致了计算样式的重排或重新计算,但我不确定.Chrome的Profiler和时间线没有信息.

造成延误的原因是什么?我怎样才能消除它?这是我的代码中的错误,还是Chrome中的错误?

http://jsfiddle.net/jmilloy/dHFsQ/

要导致延迟,请键入输入,然后删除文本.删除最终字符或选择全部然后删除时将发生延迟.

为了消除延迟,使用row4,而不是row1,row2row3.现在您可以清除输入而不会造成延迟.

笔记

  • 延迟取决于n行数.

  • 它出现在Chrome中,但不是Firefox.

  • 它出现在Linux(Ubuntu/Mint 11)和Windows 7中,但不是OSX.谁能确认一下?


一旦我有一个表现出延迟行为的jsfiddle,我完全重写了这个问题,并用一个更简单的例子再次重写.

html javascript google-chrome reflow

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

xarray中的布尔索引

我有一些昏暗的数组,'time', 'lat', 'lon'有些只是'lat', 'lon'。为了使用2d(纬度)掩码来掩盖时间相关的数据,我经常必须这样做:

x.data[:, mask.data] = np.nan
Run Code Online (Sandbox Code Playgroud)

当然,计算会按预期进行广播。如果y是2d纬度数据,则将其值广播到x中的所有时间坐标:

z = x + y
Run Code Online (Sandbox Code Playgroud)

但是索引不会像我期望的那样广播。我希望能够执行此操作,但是会引发ValueError:缓冲区的维数错误

x[mask] = np.nan
Run Code Online (Sandbox Code Playgroud)

最后,似乎xr.where 确实按预期跨时间坐标广播了掩码的值,但是您不能以这种方式设置值。

x_masked = x.where(mask)
Run Code Online (Sandbox Code Playgroud)

因此,在这里我缺少什么可以使用缺少尺寸(并且需要广播)的布尔掩码方便设置值的方法吗?我在顶部提供的选项确实是执行此操作的方式吗(在这种情况下,我不妨使用标准的numpy数组...)

python numpy python-xarray

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

为什么有一些mysql连接在删除+插入后选择mysql数据库中的旧数据?

我的python/wsgi网络应用程序中的会话有问题.每个2个wsgi守护进程中的每个线程都有一个不同的,持久的mysqldb连接.有时,在删除旧会话并创建新会话后,某些连接仍然会在select中获取旧会话,这意味着它们无法验证会话并再次请求登录.

详细信息:会话存储在本地mysql数据库的InnoDB表中.验证(通过CAS)之后,我删除该用户的任何以前的会议中,创建一个新的会话(插入行),提交事务,并重定向到最初请求的页面与Cookie中的新的会话ID.对于每个请求,将根据数据库中的会话检查cookie中的会话ID.

有时,重定向后在数据库中找不到新创建的会话.相反,该用户的会话仍然存在.(我通过选择并记录每个请求开头的所有会话来检查这一点).不知何故,我得到了缓存的结果.我尝试用SQL_NO_CACHE选择会话,但没有区别.

为什么我得到缓存结果?还有什么地方可以进行缓存,以及如何阻止缓存或刷新缓存?基本上,为什么其他连接无法看到新插入的数据?

python mysql session caching wsgi

8
推荐指数
2
解决办法
3198
查看次数