业务:
我遇到了一个问题 - 当使用Django ORM处理大型数据集时,规范的方法是使用每个元素进行操作.但当然这种方式效率很低.所以我决定使用原始SQL.
实质:
我有一个基本代码,它形成SQL查询,更新表的行,并提交它:
from myapp import Model
from django.db import connection, transaction
COUNT = Model.objects.count()
MYDATA = produce_some_differentiated_data() #Creating individual value for each row
cursor = connection.cursor()
str = []
for i in xrange(1, COUNT):
str.append("UPDATE database.table\n"
"SET field_to_modify={}\n"
"WHERE primary_key_field={};\n".format(MYDATA, i))
str = ''.join(str)
cursor.execute(str)
transaction.commit_unless_managed() #This cause exception
Run Code Online (Sandbox Code Playgroud)
在最后一个声明中我得到了这个,即使SIZE它很小:
_mysql_exceptions.ProgrammingError: (2014, "Commands out of sync; you can't run this command now")
Run Code Online (Sandbox Code Playgroud)
也许Django不允许一次执行多个SQL查询?
ps在提交之前关闭游标有助于避免异常,但这是正确的吗?
我的期望:
我正在为批量操作寻找所有可能的可靠解决方案(最好是在Django内部).我不关心它是ORM还是原始SQL,我会支持上面粘贴的代码,如果我能避免错误的话.如果没有解决方案,至少,只是为了好奇,才能知道这个例外的原因.
除了答案我还学到了什么:
在Django 1.4中引入bulk_create了高效的多重INSERT操作
如前所述这里对象与OneToOne关系到其他模型的模型自动创建.因此,如果我将Model1与O2O连接到Model2,并且将创建具有pk = 1的Model2的对象,则将自动创建Model2与model2_id = 1的对象.然后,如果我将数据从DB转储到json,我将有两个这些对象的记录.如果我将尝试将此数据加载到DB,loaddata它将失败,因为Model2的对象将被创建两次,它将导致唯一的索引违规和IntegrityError.
有人找到了理智的解决方案吗?
ps
我使用Django 1.3.7
如何将这个SQL查询转换为Django ORM语句?
SELECT field1, field2, field3
FROM table1
WHERE field1 NOT IN
(SELECT 2_field1 FROM table2);
Run Code Online (Sandbox Code Playgroud)
请帮忙!:)
PS
table1和table2不与有界ForeignKey或ManyToMany
可能重复:
通过id()获取对象?
>>> var = 'I need to be accessed by id!'
>>> address = id(var)
>>> print(address)
33003240
Run Code Online (Sandbox Code Playgroud)
有没有办法使用的地址var在内存中,所提供的id(),用于访问的价值var?
UPD:
我还想说,如果这不能在标准Python中完成,那么它也会很有趣,如果这可以通过黑客攻击C++内部的Python来实现.
UPD2:
知道如何改变价值也会很有趣var.
我是Paper.js的新手,在阅读教程时,我对事件系统感到疑惑.这就是教程中描述的事件处理方式:
var path;
function onMouseDown(event) {
// Create a path:
path = new Path();
path.strokeColor = 'black';
// Add the mouse down position:
path.add(event.point);
}
function onMouseUp(event) {
// Add the mouse up position:
path.add(event.point);
}
Run Code Online (Sandbox Code Playgroud)
所以,它只是在全局命名空间中的功能...
最后我有一些关于它的问题,我没有在互联网上找到任何东西:
- 如何将事件处理程序绑定到特定的画布?
- 如何将事件处理程序绑定到特定的"对象"(栅格图像,矩形等)?
- 如何绑定多个事件处理程序?
这段代码:
from lxml.html import fromstring, tostring
s = '<span class="left">Whatever</span>'
e = fromstring(s)
print(tostring(e))
print(bool(e))
Run Code Online (Sandbox Code Playgroud)
输出:
<span class="left">Whatever</span>
False
Run Code Online (Sandbox Code Playgroud)
为什么?布尔检查如何在这个类中工作?请指点我相关的文档或代码。
ps
我使用lxml3.3.5
我遇到过这样的错误:
File "/vagrant/env/local/lib/python2.7/site-packages/sqlalchemy/engine/default.py", line 435, in do_execute
cursor.execute(statement, parameters)
exceptions.UnicodeEncodeError: 'ascii' codec can't encode character u'\u2013' in position 8410: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
当我试图用指定的Python unicode字符串保存ORM对象时,就会发生这种情况.因此dict parameters,将unicode字符串作为其值之一,并在将其强制转换为str类型时产生错误.
我试图convert_unicode=True设置引擎和列的设置,但没有成功.
那么在SQLAlchemy中处理unicode的好方法是什么?
这是关于我的设置的一些细节:
表:
Table "public.documents"
Column | Type | Modifiers
------------+--------------------------+--------------------------------------------------------
id | integer | not null default nextval('documents_id_seq'::regclass)
sha256 | text | not null
url | text |
source | text | not null
downloaded | timestamp with time zone | not null
tags …Run Code Online (Sandbox Code Playgroud) 就我而言,我有requirements目标,该目标安装了所需的Python软件包test,并运行了测试,并取决于先前的测试。
安装依赖项是一项很长的操作,我希望仅在requirements.txt更改时才执行。我该如何实现?
这是我现在拥有的Makefile的简化示例:
.PHONY: test requirements
requirements: requirements.txt
pip install -r $<
test: tests/ | requirements
py.test $^
Run Code Online (Sandbox Code Playgroud) 当我执行一个命令python setup.py install或者python setup.py develop它会执行build_ext命令作为步骤之一。如何将--debug选项传递给它,就像它被调用一样python setup.py build_ext --debug?
更新这里setup.py与我的非常相似:https :
//github.com/pybind/cmake_example/blob/11a644072b12ad78352b6e6649db9dfe7f406676/setup.py#L43
我想调用python setup.py install但将类实例中的debug属性设置build_ext为 1。
python ×8
django ×3
orm ×2
sql ×2
bulk ×1
database ×1
distutils ×1
gnu-make ×1
graphics ×1
javascript ×1
lxml ×1
makefile ×1
paperjs ×1
persistence ×1
pointers ×1
reference ×1
setuptools ×1
shelve ×1
sqlalchemy ×1
unicode ×1