小编Eli*_*ght的帖子

多个索引可以一起工作吗?

假设我有一个包含两个字段的数据库表,"foo"和"bar".它们都不是唯一的,但每个都被编入索引.但是,它们每个都有一个单独的索引,而不是被索引在一起.

现在假设我执行一个查询,例如SELECT * FROM sometable WHERE foo='hello' AND bar='world'; My table,foo为'hello'的行数很多,而bar为'world'的行数很少.

因此,数据库服务器最有效的方法是使用bar索引查找bar为'world'的所有字段,然后仅返回foo为'hello'的那些行.这是O(n)n是bar为'world'的行数.

但是,我想这个过程可能会反过来,使用fo索引并搜索结果.这就是O(m)m是foo为'hello'的行数.

那么Oracle足够聪明,可以在这里高效搜索吗?其他数据库怎么样?或者有什么方法可以在我的查询中告诉它以正确的顺序搜索?也许bar='world'WHERE条款中排在第一位?

database oracle indexing optimization

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

提取C结构的字段

我经常要用其他语言编写与C结构交互的代码.最典型的是,这涉及使用structctypes模块编写Python代码.

所以我将有一个完整的结构定义的.h文件,我必须手动读取它们并在我的Python代码中复制这些定义.这是耗时且容易出错的,并且当它们经常变化时很难保持两个定义同步.

是否有任何语言的工具或库(不必是C或Python)可以获取.h文件并生成其结构及其字段的结构化列表?我希望能够编写一个脚本来生成我在Python中自动生成我的结构定义,并且我不希望必须处理任意C代码来执行它.正则表达式在大约90%的时间内都会起作用,然后对剩下的10%会产生无穷无尽的麻烦.

c python language-agnostic struct

14
推荐指数
2
解决办法
8706
查看次数

我可以让socket.makefile具有与常规文件相同的读取语义吗?

Python文件对象有一个read方法,它接受一个可选的size参数,它基本上是要返回的最大字节数.例如:

fname = "message.txt"
open(fname, "w").write("Hello World!")
print open(fname).read()   # prints the entire file contents
print open(fname).read(5)  # print "Hello"
print open(fname).read(99) # prints "Hello World!"
Run Code Online (Sandbox Code Playgroud)

因此,即使我们的文件少于99个字符,也会read(99)立即调用所有可用数据.

我想在socket.makefile返回的文件对象上获得此行为.但如果我说:

import socket
ADDR = ("localhost", 12345)

listener = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listener.bind(ADDR)
listener.listen(1)

client = socket.create_connection(ADDR)
cf = client.makefile("r+b", bufsize=0)

server, client_addr = listener.accept()
sf = server.makefile("r+b", bufsize=0)

sf.write("Hello World!")
sf.flush()
print cf.read(99)         # hangs forever
Run Code Online (Sandbox Code Playgroud)

根据socket.makefile文档,"可选模式和bufsize参数的解释方式与内置文件()函数的解释方式相同." 但是我的原始文件示例即使在我说的时候open(fname, "r+b", 0)也可以工作,而我无法找到一种方法,使用套接字伪文件将所有可用数据返回到指定的字节数.

如果我只是使用它,这似乎工作得很好socket.recv:

import …
Run Code Online (Sandbox Code Playgroud)

python sockets io file

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

用于检查2D嵌套内部字典中的键的单行代码

是否有单行方法来检查Python 2d dict是否具有内部键/值?

现在我做这样的事情:

if d.has_key(k1):
    if d[k1].has_key(k2): 
        # do something
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?

谢谢

python

14
推荐指数
3
解决办法
1万
查看次数

哪些方法在Python中实现缓冲区接口?

我有一个带有serialize方法的自定义类,我希望能够将此类直接编写到文件中,并serialize在Python 2.6中编写方法的返回值.(我不是想腌制我的物体,这是完全不同的东西.)例如:

class Foo(object):
    def serialize(self):
        return "Hello World!"
    __str__ = serialize

foo = Foo()
f = open("foo.dat", "wb")
f.write(foo)
Run Code Online (Sandbox Code Playgroud)

但是,当我运行此代码时,我得到以下异常

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: argument 1 must be convertible to a buffer, not Foo
Run Code Online (Sandbox Code Playgroud)

好的,所以我需要我的Foo课来实现buffer界面.我甚至在缓冲区文档中看到它说:"缓冲区接口的示例用户是文件对象的write()方法.任何可以通过缓冲区接口导出一系列字节的对象都可以写入文件."

显然我可以做我想做的事,但是文档实际上并没有说明为了实现缓冲接口我需要实现哪些方法.我已经试过落实__str__,__unicode__,__len__,甚至__sizeof__.我已经实现了__getitem__,__setitem__并且__delitem__接受了这两个intslice参数.我甚至已经试过落实过时__getslice__,__setslice____delslice__ …

python buffer

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

我可以在__unicode__中使用ForeignKey吗?

我有以下课程:成分,食谱和食谱内容......

class Ingredient(models.Model):
    name = models.CharField(max_length=30, primary_key=True)
    qty_on_stock = models.IntegerField()

    def __unicode__(self):
        return self.name

class Recipe(models.Model):
    name = models.CharField(max_length=30, primary_key=True)
    comments = models.TextField(blank=True)
    ingredient = models.ManyToManyField(Ingredient)

    def __unicode__(self):
        return self.name

class RecipeContent(models.Model):
    recipe = models.ForeignKey(Recipe)
    ingredients = models.ForeignKey(Ingredient)
    qty_used = models.IntegerField()
Run Code Online (Sandbox Code Playgroud)

但是对于RecipeContent中的__unicode __(),我想使用这个RecipeContent所属的Recipe名称...有没有办法做到这一点?

python django django-models

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

如何禁用然后重新启用警告?

我正在为Python库编写一些单元测试,并希望将某些警告作为异常引发,我可以使用simplefilter函数轻松完成.但是,对于一个测试,我想禁用警告,运行测试,然后重新启用警告.

我正在使用Python 2.6,所以我应该能够使用catch_warnings上下文管理器,但它似乎对我不起作用.即使失败了,我也应该能够调用resetwarnings然后重新设置我的过滤器.

这是一个简单的例子来说明问题:

>>> import warnings
>>> warnings.simplefilter("error", UserWarning)
>>> 
>>> def f():
...     warnings.warn("Boo!", UserWarning)
... 
>>> 
>>> f() # raises UserWarning as an exception
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in f
UserWarning: Boo!
>>> 
>>> f() # still raises the exception
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in f
UserWarning: Boo!
>>> …
Run Code Online (Sandbox Code Playgroud)

python warnings

12
推荐指数
3
解决办法
6095
查看次数

更改lxml中etree.tostring的默认缩进

我有一个XML文档,我正在使用它 lxml.etree.tostring

print etree.tostring(doc, pretty_print=True)
Run Code Online (Sandbox Code Playgroud)

默认的缩进级别是2个空格,我想将其更改为4个空格.在函数中没有任何争论tostring; 有没有办法用lxml轻松完成这项工作?

python lxml pretty-print

11
推荐指数
2
解决办法
5258
查看次数

Python聊天:删除变量以清除函数中的内存?

我正在python和扭曲的框架中创建一个聊天守护进程.我想知道是否必须删除我的函数中创建的每个变量,以便在连接多个用户时长期保存内存,或者这些变量是否自动清除?这是我的代码的精简版,以说明我的观点:

class Chat(LineOnlyReceiver):

    LineOnlyReceiver.MAX_LENGTH = 500

    def lineReceived(self, data):

            self.sendMessage(data)

    def sendMessage(self, data):

            try:
                message = data.split(None,1)[1]
            except IndexError:
                return

            self.factory.sendAll(message)

            #QUESTION : do i have to delete message and date??????????????????

            del message
            del data


class ChatFactory(Factory):
    protocol = Chat

    def __init__(self):
        self.clients = []

    def addClient(self, newclient):
        self.clients.append(newclient)

    def delClient(self, client):
        self.clients.remove(client)

    def sendAll(self, message):
        for client in self.clients:
            client.transport.write(message + "\n")
Run Code Online (Sandbox Code Playgroud)

python class function twisted

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

事件处理程序是否可以在调用AJAX回调之前完成?

假设我有一个事件处理程序,它对服务器进行两次AJAX调用:

$("#foo").click(function(){ 
    $.get("bar", function(){ alert("Hello"); });
    $.get("baz", function(){ alert("World"); });
});
Run Code Online (Sandbox Code Playgroud)

我意识到调用回调的顺序是不确定的,因为它取决于每个请求需要多长时间等.

但这是我的问题:是否保证在调用任何一个回调函数之前我将到达事件处理程序的末尾?我已经读过一个页面的所有Javascript都在一个线程中执行,所以我认为这意味着我click可以保证在调用任何回调之前完成我的事件处理程序.

它是否正确?或者第一个请求是否可能完成并且在我们甚至到达事件处理程序结束之前执行了第一个回调?

javascript ajax asynchronous

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