小编Dan*_*anH的帖子

带有WHERE id IN(SELECT ...)的mysqldump产生表"未锁定"错误

我有2个数据库,用〜100,000行从表中缺少field_collection_itemdb1,我想通过出口来维修db2.

我实现这一目标的计划是:

  1. item_idin 识别缺失的项目db2,导出item_ids 列表.
  2. item_ids导入db1到新表中missing_field_collection_item
  3. 使用以下mysqldump来提取数据:

    mysqldump -u USER -pPASS DATABASE --no-create-info --tables field_collection_item --where ="item_id IN(SELECT item_id FROM missing_field_collection_item);"

但是这会给出错误:

Couldn't execute 'SELECT /*!40001 SQL_NO_CACHE */ * FROM `field_collection_item` WHERE item_id IN (SELECT item_id FROM missing_field_collection_item);': Table 'missing_field_collection_item' was not locked with LOCK TABLES (1100)
Run Code Online (Sandbox Code Playgroud)

我更愿意这样做而不进行更改,db2但是它并不是绝对必要的,如果事实证明这样做的唯一现实方法是删除我不想要的行然后在没有where子句的情况下转储.

UPDATE

我发现上面的工作只是通过添加--single-transaction,似乎关闭锁定.这应该是安全的,因为db2不是活的,但是我不自信我理解任何副作用,所以我不会接受这个作为没有第二意见的答案.

mysql mysqldump where-clause

19
推荐指数
2
解决办法
5246
查看次数

有没有"正确"的方法将django.db.models.query.ValuesListQuerySet转换为纯List?

我试图在一个方法中删除多个模型中的记录,我有以下架构:

picture 1:1 picture_foreign_picture *:1 picture_foreign
Run Code Online (Sandbox Code Playgroud)

我正在删除这些给定列表picture_foreign对象:

picture_foreign_pictures = PictureForeignPicture.objects.filter(picture_foreign__in=picture_foreigns)
picture_ids = picture_foreign_pictures.values_list('picture_id', flat=True)
logger.warn('PICTURES REMOVE: %s' % picture_ids)
picture_foreign_pictures.delete()
logger.warn('PICTURES REMOVE: %s' % picture_ids)
Run Code Online (Sandbox Code Playgroud)

2个记录器行输出以下内容:

WARNING 2013-01-02 03:40:10,974 PICTURES REMOVE: [86L]
WARNING 2013-01-02 03:40:11,045 PICTURES REMOVE: []
Run Code Online (Sandbox Code Playgroud)

尽管如此,图片86仍然存在:

mysql> select id from picture where id = 86;
+----+
| id |
+----+
| 86 |
+----+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

我想我可以通过简单地转换picture_ids成纯整数列表来解决这个问题但是我想知道是否有更多的Django方法呢?我flat=True原本以为它已经处理好了,但它似乎不仅仅是一个纯粹的清单.

django django-models

12
推荐指数
2
解决办法
6572
查看次数

Java与Python HMAC-SHA256不匹配

根据最近对这个问题的反馈和发现,我重写了摆脱噪音的问题.

我有两个单独的代码路径,一个在Java(Android),一个和Python,它们完成以下目的,用于协商Android设备和Python/Django之间的配对.

Java的:

  • 生成syncKey
  • 使用presharedKey(包括syncKey)散列各种值的串联字符串
  • 使用presharedKey加密syncKey
  • 将哈希,加密的syncKey,DeviceId和任意变量发送到Web服务器

蟒蛇

  • 从deviceId获取presharedKey
  • 解密加密的syncKey
  • 使用presharedKey(包括解密的syncKey)散列各种值的串联字符串
  • 确保哈希匹配,确认syncKey已成功解密,并且deviceId保存正确的presharedKey.

现在,如果我发送未加密的syncKey,此过程将起作用.最终的哈希匹配,证明deviceId具有正确的预共享密钥,但是只要我将en/decryption添加到进程中,哈希就不再匹配,尽管syncKey和连接字符串看起来都完全匹配Java/Python的调试输出中的字符字符.

这个过程的一个怪癖是AES256加密算法需要256位密钥,因此我将512bit预共享密钥切成两半.在整个电路板上只使用256位密钥的替代方案是要求我在密钥encode('ascii')端传递密钥,否则在使用较短密钥进行散列时会抛出错误.

这是相关代码:

Java的:

String presharedKey = getKey();
// f8250b0d5960444e4de6ecc3a78900bb941246a1dece7848fc72b90092ab3ecd0c1c8e36fddba501ef92e72c95b47e07f98f7fd9cb63da75c008a3201124ea5d

String deviceId = getDeviceId();
// 1605788742789230

SyncKey syncKey = generateSyncKey();
// 824C1EE9EF507B52EA28362C71BD4AD512A5F82ACFAE80DEF531F73AC124CA814BA30CE805A157D6ADB9EC04FC99AAE6FDC4238FCD76B87CE22BC2FE33B2E5C9

String concat = syncKey.hexString();
// 824C1EE9EF507B52EA28362C71BD4AD512A5F82ACFAE80DEF531F73AC124CA814BA30CE805A157D6ADB9EC04FC99AAE6FDC4238FCD76B87CE22BC2FE33B2E5C9

String ALGORITHM = "HmacSHA256";
String hash = null;
try {
    SecretKeySpec keySpec = new SecretKeySpec(
        presharedKey.getBytes(),
        ALGORITHM);
    Mac mac = Mac.getInstance(ALGORITHM);
    mac.init(keySpec);
    byte[] result = mac.doFinal(concat.getBytes());
    hash = Base64.encodeToString(result, Base64.DEFAULT);
    // FpDE2JLmCBr+/rW+n/jBHH13F8AV80sUM2fQAY2IpRs=
} catch (NoSuchAlgorithmException x) {
} …
Run Code Online (Sandbox Code Playgroud)

python java android hmac

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

警告:自BINLOG_FORMAT = STATEMENT以来,使用语句格式将不安全语句写入二进制日志

完整错误:

Warning: Unsafe statement written to the binary log using statement format 
since BINLOG_FORMAT = STATEMENT. Statements writing to a table with an 
auto-increment column after selecting from another table are unsafe because 
the order in which rows are retrieved determines what (if any) rows will be
written. This order cannot be predicted and may differ on master and the 
slave.
Run Code Online (Sandbox Code Playgroud)

尝试从Django运行原始SQL时,我似乎只是遇到此错误.如果我从MySQL CLI客户端运行SQL,我不会得到相同的错误.这是SQL:

UPDATE picture p
JOIN (
    SELECT @inc := @inc + 1 AS new_weight, id
    FROM (SELECT @inc …
Run Code Online (Sandbox Code Playgroud)

mysql master-slave

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

无法在Windows上导入distutils.dir_util

我正在尝试在Windows 7 64位上使用distutils.dir_util.据我可以从各种谷歌搜索收集,我可能需要单独安装一些distutils包?我确实有可用的基础distutils包,但是它似乎非常简单,并且缺少许多组件.试图研究distutils和windows总是让我看到python构建脚本以及如何将distutils打包为可再发行的python项目的一部分或构建我不感兴趣的EXE,我根本看不到任何关于从哪里获取这个的牵引力代码来自.

这已经很长时间了,但是我认为我从MSI安装程序安装了Python,不确定其他方法是否常见.这是我的翻译输出:

Python 2.7.3 (default, Apr 10 2012, 23:24:47) [MSC v.1500 64 bit (AMD64)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> import distutils
>>> distutils.dir_util
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'dir_util'
Run Code Online (Sandbox Code Playgroud)

好的,看起来可以使用以下代码:

Python 2.7.3 (default, Apr 10 2012, 23:24:47) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import distutils.core
>>> distutils.dir_util …
Run Code Online (Sandbox Code Playgroud)

python distutils windows-7-x64

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

Python Tuple to Dict,带有额外的键列表

所以我有这个元组数组:

[(u'030944', u'20091123', 10, 30, 0), (u'030944', u'20100226', 10, 15, 0)]
Run Code Online (Sandbox Code Playgroud)

我有这个字段名称列表:

['id', 'date', 'hour', 'minute', 'interval']
Run Code Online (Sandbox Code Playgroud)

我想,如果可能的话,一举将元组列表转换为dict:

[{
    'id': u'030944',
    'date': u'20091123',
    'hour': 10,
    'min': 30,
    'interval': 0,
},{
    'id': u'030944',
    'date': u'20100226',
    'hour': 10,
    'min': 15,
    'interval': 0,
}]
Run Code Online (Sandbox Code Playgroud)

python list-comprehension django-1.5

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

PHP:使用在单独数组中定义的路径设置多维关联数组元素的值

好的,我有一个包含以下元素的数组:

$array['a']['b'][0]['c'];
$array['a']['b'][1]['c'];
$array['a']['d'][0]['c']['c'];
$array['b']['c'];
Run Code Online (Sandbox Code Playgroud)

然后在一个单独的数组中,我定义了这些值的路径:

$structure[0] = array('a','b','#','c');
$structure[1] = array('a','d','#','c','c');
$structure[2] = array('b','c');
Run Code Online (Sandbox Code Playgroud)

最后,我有一个包含值的数组:

$values[0] = array('value0-0','value0-1');
$values[1] = array('value1-0');
$values[2] = array('value2-0');
Run Code Online (Sandbox Code Playgroud)

我正在尝试找到一个简单的函数/循环,它能够将$ values中的值应用于$ structure中定义的$ array的数组路径.

最终结果将是:

$array['a']['b'][0]['c']='value0-0';
$array['a']['b'][1]['c']='value0-1';
$array['a']['d'][0]['c']['c']='value1-0';
$array['b']['c']='value2-0';
Run Code Online (Sandbox Code Playgroud)

在$ values [0]或$ values [1]的情况下,它将能够循环遍历每个值,并将匹配'#'的$ structure元素替换为该特定$值的迭代次数.

这只是一个折腾和编写绘制的递归函数的情况,还是有一个智能构造或PHP函数可以提供更优雅的解决方案?

解:

感谢Mario,我的最终解决方案是:

foreach ($struct as $i=>$keys)
  foreach ($values[$i] as $val) {
    $r = & $array;

    foreach ($keys as $key) {

        if ($key == "#") { $key = $i; }

        $r = & $r[$key];    // move pointer to subarray
    } …
Run Code Online (Sandbox Code Playgroud)

php arrays loops

8
推荐指数
1
解决办法
4496
查看次数

Firefox在拖动文本时触发dragleave

我试图跟踪整个屏幕的dragenter/leave,这在Chrome/Safari中运行良好,由/sf/answers/721757081/提供的draghover插件提供,如下所示:

$.fn.draghover = function(options) {
    return this.each(function() {

        var collection = $(),
            self = $(this);

        self.on('dragenter', function(e) {
            if (collection.size() === 0) {
                self.trigger('draghoverstart');
            }
            collection = collection.add(e.target);
        });

        self.on('dragleave drop', function(e) {
            // timeout is needed because Firefox 3.6 fires the dragleave event on
            // the previous element before firing dragenter on the next one
            setTimeout( function() {
                collection = collection.not(e.target);
                if (collection.size() === 0) {
                    self.trigger('draghoverend');
                }
            }, 1);
        });
    });
};

function setText(text) {
    $('p.target').text(text); …
Run Code Online (Sandbox Code Playgroud)

javascript firefox drag-and-drop

7
推荐指数
2
解决办法
4967
查看次数

如何调试永远不会完成加载的PHP脚本?

我的任务是在各种环境中建立一个网站,用于不同的评估阶段(开发/测试/升级/等).

但是,在我们的暂存环境中,似乎存在一些阻止PHP脚本完成的差异,因此页面永远不会传递给浏览器.

我想知道是否有一种方法可以输出以在切断连接时记录某种堆栈跟踪或回溯,或者是否有其他方法可以找出PHP在脚本生命周期中的任何给定点上究竟做了什么?

它是一个Drupal站点,所以它涉及很多我不熟悉的代码,并且可能需要花费数小时来遍历die;命令以查看脚本加载到的位置.

我理解我应该看看环境的差异,但是所有应该都有非常相似的配置(Ubuntu 11.04),并且暂存环境似乎非常乐意为其他PHP站点提供服务,而这个特定站点拒绝完成.如果此暂存站点有更多可用资源可用于其他没有问题的环境.

更新:对不起,最后发现了问题.暂存环境位于不允许通过公共IP访问自身的VLAN上,无论出于何种原因(仍然对此感到困惑),它试图将自身作为页面加载的一部分进行访问,并且永远不会完成请求.为127.0.0.1设置hosts文件条目修复了该问题.

php debugging

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

从控制器中触发jQuery DOM Manipulation的正确方法是什么?

所以我一直在阅读控制器中的jQuery操作是不好的做法,但我不清楚为什么或如何纠正.

下面是来自Youtube教程的代码,即使是视频创建者的评论也是一个坏主意,但无法解释为什么并继续使用不良行为.

来自https://www.youtube.com/watch?v=ilCH2Euobz0#t=553s:

$scope.delete = function() {
    var id = this.todo.Id;
    Todo.delete({id: id}, function() {
        $('todo_' + id).fadeOut();
    });
};
Run Code Online (Sandbox Code Playgroud)

解决方案:

根据兰登在下面的回答,我已经得到了以下我自己的工作代码,这些代码与上面的示例代码略有不同:

var ProjectListCtrl = function ($scope, Project) {
    $scope.projects = Project.query();
    $scope.delete = function() {
        var thisElem = this;
        var thisProject = thisElem.project;
        var id = thisProject.id;
        Project.delete({id: id}, function() {
            var idx = $scope.projects.indexOf(thisProject);
            if (idx !== -1) {
                thisElem.destroy('removeItem('+idx+')');
            }
        });
    }

    $scope.removeItem = function(idx) {
        $scope.projects.splice(idx, 1);
    }

}

app.directive('fadeOnDestroy', function() {
    return …
Run Code Online (Sandbox Code Playgroud)

javascript angularjs angularjs-controller

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