小编Eri*_*ric的帖子

MongoDB不比MySQL快吗?

几个月前我发现了mongodb,在看过这篇文章后,我觉得mongodb真的比mysql快,所以我决定建立自己的替补,问题是我的结果与上面帖子的作者不一样,特别是查询数据库:mongodb似乎比MyISAM表慢.你能看看我的python代码,可能是它有什么问题:

from datetime import datetime
import random
import MySQLdb
import pymongo

mysql_db=MySQLdb.connect(user="me",passwd="mypasswd",db="test_kv")
c=mysql_db.cursor()

connection = pymongo.Connection()
mongo_db = connection.test
kvtab = mongo_db.kvtab

nb=1000000
thelist=[]
for i in xrange(nb):
    thelist.append((str(random.random()),str(random.random())))
t1=datetime.now()

for k,v in thelist:
    c.execute("INSERT INTO key_val_tab (k,v) VALUES ('" + k + "','" + v + "')")

dt=datetime.now() - t1
print 'MySQL insert elapse :',dt

t1=datetime.now()
for i in xrange(nb):
    c.execute("select * FROM key_val_tab WHERE k='" + random.choice(thelist)[0] + "'")
    result=c.fetchone()

dt=datetime.now() - t1
print 'MySQL select …
Run Code Online (Sandbox Code Playgroud)

python mysql mongodb

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

如何在不加载相应项的情况下读取ForeignKey的主键?

我有2个Django型号:

class A(models.Model):
    uniq_name = models.CharField(max_length=30,primary_key=True)
    info1 = models.CharField(max_length=30)     
    info2 = models.CharField(max_length=30)

class B(models.Model):
    a = models.ForeignKey(A)
    info3 = models.CharField(max_length=30)     
    info4 = models.CharField(max_length=30)
Run Code Online (Sandbox Code Playgroud)

如果我做 :

b = B.objects.get(id = n), it generates one database request.
Run Code Online (Sandbox Code Playgroud)

如果我做

print b.a.pk : it generate another request.
Run Code Online (Sandbox Code Playgroud)

是否可以访问ba主键(我只需要此信息,而不是info1或info2)而不生成另一个请求,也不使用'select_related()'?

我可以做一个:

print b.__dict__['a_id']
Run Code Online (Sandbox Code Playgroud)

它有效,但在我看来非常难看:你有更好的方式吗?

django models

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

克隆继承的django模型实例

当我克隆一个django模型实例时,我习惯于清理'pk'字段.这似乎不适用于继承的模型:

拿着这个 :

class ModelA(models.Model):
    info1 = models.CharField(max_length=64)

class ModelB(ModelA):
    info2 = models.CharField(max_length=64)

class ModelC(ModelB):
    info3 = models.CharField(max_length=64)
Run Code Online (Sandbox Code Playgroud)

现在让我们创建一个实例并按照"通常"的方式克隆它(我使用的是django shell):

In [1]: c=ModelC(info1="aaa",info2="bbb",info3="ccc")

In [2]: c.save()

In [3]: c.pk
Out[3]: 1L

In [4]: c.pk=None  <------ to clone

In [5]: c.save()   <------ should generate a new instance with a new index key

In [6]: c.pk       
Out[6]: 1L         <------ but don't

In [7]: ModelC.objects.all()
Out[7]: [<ModelC: ModelC object>]   (only one instance !)
Run Code Online (Sandbox Code Playgroud)

我发现的唯一方法是:

In [16]: c.pk =None

In [17]: c.id=None

In [21]: …
Run Code Online (Sandbox Code Playgroud)

python django django-models

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

如何覆盖django静态文件开发服务器?

我开始使用应用程序'django.contrib.staticfiles'将静态文件收集到我项目的/ static /目录中.

问题是,当我使用django开发服务器(manage.py runserver)时,它会自动提供静态文件.

它通常很好,但在我的情况下,我想自己提供这些静态文件.

我想在urls.py文件中添加类似的内容:

urlpatterns += patterns('',
        url('^static/(?P<path>.*)$', myStaticMediaServe,{'document_root': settings.STATIC_ROOT ,'show_indexes': True}),
        )
Run Code Online (Sandbox Code Playgroud)

问题是'django.contrib.staticfiles'应用程序在settings.DEBUG = True时优先使用'/ static /'url:我找不到让Django在使用时使用我的'/ static /'urlpattern描述的方法调试模式

如果我从settings.py中删除'django.contrib.staticfiles':我的'/ static /'urlpattern可以工作,但是我收集了静态文件.

你有想法使用'django.contrib.staticfiles'并通过urlpattern描述使用我自己的静态文件服务器并且有settins.DEBUG = True

django

6
推荐指数
2
解决办法
838
查看次数

如何强制buildout使用已安装的包

在服务器上,对于磁盘优化,我们不安装C编译器,这就是问题所在:

我想用buildout 2.3.1安装' spur'python 包,spur正在使用需要C编译器的pycrypto.

为避免编译,我在服务器(Suse 11SP2)上安装了rpm python-pycrypto(python-pycrypto-2.6-31.7.x86_64.rpm).我可以用'pip freeze'来检查pycrypto的安装情况:

pip freeze 

lxml==2.1.2
mod-python==3.3.1
Numeric==24.2
numpy==1.3.0
pycrypto==2.6
pywbem==0.7.0
PyXML==0.8.4
Run Code Online (Sandbox Code Playgroud)

然而,当我开始构建时,它仍然尝试使用不存在的C编译器构建pycrypto.

所以我在buildout.cfg中添加了include-site-packages = true和allowed-eggs-from-site-packages = pycrypto,但它们没有被考虑在内.我也尝试过:

python bootstrap.py --allow-site-packages
bin/buildout
Run Code Online (Sandbox Code Playgroud)

但这也没有帮助.

我可以做些什么来避免buildout编译已经从rpm编译和安装的软件包?

这是buildout.cfg

[buildout]
newest = false
extensions = gp.vcsdevelop
develop-dir = src
parts = eggs tests wsgi
include-site-packages = true
allowed-eggs-from-site-packages = pycrypto

eggs =
    Django==1.4.8
    ordereddict
    ipython==0.13.2
    django-webtest
    django-grappelli<2.5.0
    django-bootstrap3-datetimepicker
    z3c.recipe.usercrontab
    rrdgraphs
    south
    achilterm
    pynag
    pyaml<14
    DjangoDevKit==1.0.3
    Sphinx
    xlwt
    xlrd
    spur

...
Run Code Online (Sandbox Code Playgroud)

和日志:

# bin/buildout
Unused options for …
Run Code Online (Sandbox Code Playgroud)

python buildout

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

如何检查函数/方法/类是否是 Python 内置的?

如果我做这样的事情:

from mailbox import Mailbox
Mailbox.get = 'dummy'
Run Code Online (Sandbox Code Playgroud)

没有错误,我只是替换了get方法。但如果我做一个:

from datetime import datetime
datetime.now = 'dummy'
Run Code Online (Sandbox Code Playgroud)

我得到:

TypeError: can't set attributes of built-in/extension type 'datetime.datetime'
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为源代码在/usr/lib/python3.6/datetime.py. 我猜这个库是出于性能原因编译的,这就是它不能修改的原因。但是,那么,问题是:我怎么知道一个类是不可变的,因为它是内置的或扩展的(不像我那样只进行测试)?为什么我可以修补Mailbox类而不是datetime类?

python

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

Mysql + 大表 = 慢查询?

Mysql 上的大表存在一些性能问题:该表有 3800 万行,大小为 3GB。我想通过测试 2 列来选择:我尝试了许多索引(每列一个索引,2 列一个索引),但查询仍然很慢:如下所示,获取 1644 行需要 4 秒以上:

SELECT `twstats_twwordstrend`.`id`, `twstats_twwordstrend`.`created`, `twstats_twwordstrend`.`freq`, `twstats_twwordstrend`.`word_id` FROM `twstats_twwordstrend` WHERE (`twstats_twwordstrend`.`word_id` = 1001 AND `twstats_twwordstrend`.`created` > '2011-11-07 14:01:34' );
...
...
...
1644 rows in set (4.66 sec)

EXPLAIN SELECT `twstats_twwordstrend`.`id`, `twstats_twwordstrend`.`created`, `twstats_twwordstrend`.`freq`, `twstats_twwordstrend`.`word_id` FROM `twstats_twwordstrend` WHERE (`twstats_twwordstrend`.`word_id` = 1001 AND `twstats_twwordstrend`.`created` > '2011-11-07 14:01:34' );
+----+-------------+----------------------+-------+-----------------------------------------------------+-----------------------+---------+------+------+-------------+
| id | select_type | table                | type  | possible_keys                                       | key                   | key_len | ref  | rows | Extra       |
+----+-------------+----------------------+-------+-----------------------------------------------------+-----------------------+---------+------+------+-------------+
| …
Run Code Online (Sandbox Code Playgroud)

mysql

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

Django LANGUAGE_CODE = 'en' 但显示 'fr'?

我在里面使用 {% trans %} 用英语编写了我的模板。

我决定把它翻译成法语,所以我把它放在设置中:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'debug_toolbar.middleware.DebugToolbarMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

LANGUAGES = (
    ('en', _('English')),
    ('fr', _('French')),
)

LANGUAGE_CODE = 'fr'

LOCALE_PATHS = (
    os.path.join(BASE_DIR, 'locale'),
)

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True
Run Code Online (Sandbox Code Playgroud)

然后我使用 makemessages 和 compilemessages 来生成翻译后的字符串。这很好用!我的网站是法语。

但是现在我想让我的网站恢复为英文,所以我只需将 LANGUAGE_CODE 更改为:

LANGUAGE_CODE = 'en'
Run Code Online (Sandbox Code Playgroud)

但我的网站仍然是法语!甚至 django-debug-bar 仍然是法语。

我发现的唯一解决方法是在 LANGUAGES 中注释掉法语:

LANGUAGES = (
    ('en', _('English')),
    # ('fr', _('French')),
)
Run Code Online (Sandbox Code Playgroud)
  • 我试图移动列表中的 localMiddleware :没有成功,
  • 我试图清除 cookie:没有成功。
  • 我生成了英文 …

python django

4
推荐指数
1
解决办法
3098
查看次数

为什么在执行setup.py sdist时find_packages(exclude = xxx)不起作用?

我正在打包我的源代码,但我不想包含测试和文档,因为它太大了。

为此,我将其包含在setup.py中:

setup(...
      packages=find_packages(exclude=['tests.*','tests','docs.*','docs']),
      ...
)
Run Code Online (Sandbox Code Playgroud)

当做一个

python setup.py sdist
Run Code Online (Sandbox Code Playgroud)

我可以看到我的root tests /和docs / dirs以及其中的所有内容仍然包含在生成的发行版中。

似乎只有

python setup.py bdist
Run Code Online (Sandbox Code Playgroud)

对exclude参数很敏感。

为什么呢 是否可以排除“ setup.py sdist”的目录?

python setup.py

4
推荐指数
1
解决办法
715
查看次数

Python 3.7 真的比 Python 3.6 快吗?

我曾经在 ubuntu 中运行 Python 3.6.7。今天,我尝试了非常新的 python 3.7.3,但我有点失望:在我看来,3.7 比 3.6 慢:

这两个版本都来自于 deadsnakes/ppa,当我运行 Python 基准测试套件时,许多测试中 3.7 应该比 3.6 快(dixit speed.python.org),我注意到相反的情况:

蟒蛇 3.6:

[ 1/47] 2to3...
INFO:root:Running `/home/elapouya/tmp/venv36/bin/python -u /home/elapouya/tmp/venv36/lib/python3.6/site-packages/performance/benchmarks/bm_2to3.py --output /tmp/tmp27lejbkn`
.....................
2to3: Mean +- std dev: 319 ms +- 5 ms
[ 2/47] chameleon...
INFO:root:Running `/home/elapouya/tmp/venv36/bin/python -u /home/elapouya/tmp/venv36/lib/python3.6/site-packages/performance/benchmarks/bm_chameleon.py --output /tmp/tmp_jvgzmw7`
.....................
chameleon: Mean +- std dev: 8.99 ms +- 0.13 ms
[ 3/47] chaos...
INFO:root:Running `/home/elapouya/tmp/venv36/bin/python -u /home/elapouya/tmp/venv36/lib/python3.6/site-packages/performance/benchmarks/bm_chaos.py --output /tmp/tmpbpea7n4x`
.....................
chaos: Mean +- std dev: 114 ms +- 2 …
Run Code Online (Sandbox Code Playgroud)

python

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

pipenv:如何强制virtualenv目录?

实际上,pipenv将使用以下路径安装virtualenv:

$WORKON_HOME/<base_dir>-<hash>
Run Code Online (Sandbox Code Playgroud)

例如,是否可能确切地具有我想要的路径,即没有base_dir和和hash,所以:

/home/user/myapp_venv
Run Code Online (Sandbox Code Playgroud)

python pip pipenv

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

svn 无法访问带有 @ 的 URL

我使用 PyCharm 重命名我项目的一个分支:我要求将我的分支 v4.0.0 重命名为 v5.0.0,但我不知道为什么,但 PyCham@在目标名称中添加了一个。我懂了 :

svn ls svn+ssh://svn@devhost/myproject/branches/
v2.0.0/
v3.0.0/
v5.0.0@/   <----
Run Code Online (Sandbox Code Playgroud)

现在,如果我尝试列出此分支中的文件,我会得到:

svn ls svn+ssh://svn@devhost/myproject/branches/v5.0.0@/
svn: warning: W160013: URL 'svn+ssh://svn@devhost/myproject/branches/v5.0.0' non-existent in revision 15667
svn: E200009: Could not list all targets because some targets don't exist
Run Code Online (Sandbox Code Playgroud)

我尝试不使用@,或者使用%40:我有相同的消息。我尝试了该-r <some revision>选项以查看它是否是修订问题,但没有帮助。我尝试再次使用 PyCharm 重命名v5.0.0@v5.0.0:它告诉我无法重命名为自身。我尝试再次使用 PyCharm 重命名v5.0.0@v4.0.0: 它再次v4.0.0@用 a重命名@

有趣的是pycharm仍然可以在里面浏览 svn+ssh://svn@devhost/myproject/branches/v5.0.0@/

在我的终端上,svn ls不起作用,svn co还有 ! 我自己无法创建工作副本! …

svn pycharm

0
推荐指数
1
解决办法
35
查看次数

标签 统计

python ×8

django ×4

mysql ×2

buildout ×1

django-models ×1

models ×1

mongodb ×1

pip ×1

pipenv ×1

pycharm ×1

setup.py ×1

svn ×1