小编lov*_*esh的帖子

无法使用flask-sqlalchemy创建自动增量主键

我希望我的模型的主键是一个自动递增的整数.这是我的模型的样子

class Region(db.Model):
    __tablename__ = 'regions'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(100))
    parent_id = db.Column(db.Integer, db.ForeignKey('regions.id'))
    parent = db.relationship('Region', remote_side=id, primaryjoin=('Region.parent_id==Region.id'), backref='sub-regions')
    created_at = db.Column(db.DateTime, default=db.func.now())
    deleted_at = db.Column(db.DateTime)
Run Code Online (Sandbox Code Playgroud)

上面的代码创建了我的表,但没有id自动增量.因此,如果在我的插入查询中我错过了该id字段,它会给我这个错误

错误:列"id"中的空值违反非空约束

所以我把id声明改成了这样的样子

id = db.Column(db.Integer, db.Sequence('seq_reg_id', start=1, increment=1),
               primary_key=True)
Run Code Online (Sandbox Code Playgroud)

还是一样的错误.上面的代码有什么问题?

python postgresql sqlalchemy flask flask-sqlalchemy

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

当MongoDB用作数据库时使用哪个python web框架(django或django-norel或pyramid)

我使用MongoDB作为我的主要(并且直到现在)数据库,因为谷歌及其提供的链接我在Django或金字塔之间感到困惑.

我对python很满意,但从未在python中进行过Web开发(我已经在PHP中完成了).现在因为我将使用Mongo所以我不会使用Django ORM会带走人们与Django相关联的易用性吗?

我是Django的新手(只需几个小时),所以我不确定ORM影响框架的哪些部分.

或者我应该使用带有django mongodb引擎的django fork django-norel(虽然它们没有被主动维护)或者我应该使用Pyramid,因为我打算使用jinja2作为我的模板层,这使得django的两部分对我无用.

从django中取出这些电池后,它仍然是一个有截止日期的人的框架吗?

建议吗?

python django mongodb pyramid

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

查询1000万份mongodb文件

我在mongodb文档中存储了诸如名称,作者,价格,出版商等书籍元数据.我有大约1000万份这些文件,它们都在一个集合中.平均文档大小为1.9 KB.现在我有索引name,authorsprice.事实上,我有两个索引,价格一个按升序排列,一个降序排列.我的mongodb版本是2.2.0,我使用PHP驱动程序来查询mongo.驱动程序的版本是1.12.但是当我对价格进行范围查询时,我会得到一个MongoCursorTimeoutException.在我的查询中,我试图找到某个价格范围内的书籍,如"价格低于1000且超过500".

增加超时似乎不是一个好主意(它已经是30秒).还有什么我可以做的,以加快查询过程.

编辑 其实我的价格指数是复合的.我有,所以我的价格指数看起来像它有一个整数值的状态字段{price:-1,status:1}{price:1,status:1} 我也是想在与PHP一次检索20个文档.

php mongodb

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

在mongoDB中插入或忽略多个文档

我有一个集合,其中我的所有文档至少有这两个字段,比如说nameurl(其中url唯一的所以我在其上设置了一个唯一的索引).现在,如果我尝试插入带有副本的文档url,则会出错并停止程序.我不希望这种行为,但我需要这样的东西mysqlinsert or ignore,所以MongoDB的不应该重复插入文档url,并继续下一个文件.

是否有一些参数我可以传递给insert命令来实现这种行为?我通常使用pymongoas 做一批插入:

collection.insert(document_array)
Run Code Online (Sandbox Code Playgroud)

collection是一个集合,document_array是一个文档数组.

那么有什么方法可以实现insert or ignore多文档插入的功能吗?

mongodb pymongo mongodb-query

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

地图上的flatMap给出错误:参数数量错误; 预期= 1

我有一张地图

val m = Map(1->2, 3->4, 5->6, 7->8, 4->4, 9->9, 10->12, 11->11)
Run Code Online (Sandbox Code Playgroud)

现在我想要一个其键等于值的地图.所以我这样做

def eq(k: Int, v: Int) = if (k == v) Some(k->v) else None
m.flatMap((k,v) => eq(k,v))
Run Code Online (Sandbox Code Playgroud)

这给了我错误

error: wrong number of parameters; expected = 1
m.flatMap((k,v) => eq(k,v))
Run Code Online (Sandbox Code Playgroud)

上述代码有什么问题?flatMap期待一个参数函数,这里我传递一个参数,它是一对整数.

这也有效

m.flatMap {
   case (k,v) => eq(k,v)
}
Run Code Online (Sandbox Code Playgroud)

但事实并非如此

m.flatMap {
      (k,v) => eq(k,v)
}
Run Code Online (Sandbox Code Playgroud)

看起来我错过了一些东西.救命?

scala

9
推荐指数
2
解决办法
1954
查看次数

为什么我无法在switch-case块中实例化对象

我的代码有3个类n_hexa,n_octa,n_bin.代码在这里

switch(choice)
{
case 1: cin>>n; 
 n_hexa nx(n);
        break;
case 2: cin>>n; 
 n_octa no(n);
        break;
case 3: cin>>n;
 n_bin nb(n);
        break;
}
Run Code Online (Sandbox Code Playgroud)

在编译它时,为n_octa行提供消息" n_hexa的初始化 "

c++ block instantiation switch-statement

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

curlopt_binarytranfer到底意味着什么?

我不明白有什么区别

CURLOPT_RETURNTRANSFER AND
CURLOPT_BINARYTRANSFER
Run Code Online (Sandbox Code Playgroud)

我写了一个脚本来检查它

<?php
$image_url = "http://localhost/curl/img1.png";
$ch = curl_init();
$timeout = 0;
curl_setopt ($ch, CURLOPT_URL, $image_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
$image = curl_exec($ch);
curl_close($ch);
header("Content-type: image/jpeg");
print $image;
?>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果我删除该行,我将获得在浏览器中显示的图像

curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
Run Code Online (Sandbox Code Playgroud)

我仍然可以在浏览器中显示图像.

现在,如果我删除该行

header("Content-type: image/jpeg");
Run Code Online (Sandbox Code Playgroud)

然后iget二进制数据显示在浏览器中(看起来像垃圾)两种情况下我是否删除curl_setopt($ ch,CURLOPT_BINARYTRANSFER,1); 或者我不删除.那么这个选项有什么区别CURLOPT_BINARYTRANSFER

php libcurl

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

什么是ob_flush和ob_end_flush之间的区别?

我感到困惑的PHP函数ob_flush()ob_end_flush().关于函数ob_flush手册

The buffer contents are discarded after ob_flush() is called.This function does not destroy the output buffer like ob_end_flush() does. 
Run Code Online (Sandbox Code Playgroud)

我感到困惑的话discarded,并destroyed在这里.即使缓冲内容在ob_flush()它们无法被访问的情况下被丢弃,即使它们被丢弃也是如此,因为ob_end_flush()它们无法被访问.那么这两个函数之间的区别是什么?

更新:

为了回应JamWaffles的回答,我不明白删除缓冲区中的所有内容的重要性,但保持缓冲区与删除整个缓冲区(释放它),因为PHP没有指针的概念,你不能得到缓冲区的地址,所以它是否无关紧要你随身携带空缓冲区,或者你将它释放出来

php output-buffering

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

如何在遇到某个条件时阻止onbeforeunload触发?

我有一个页面,我想确认用户是否想要离开.我只有在满足某个条件时才需要确认,所以我写了这样的代码

var back=false;
back=//check if user pressed back button
window.onbeforeunload = function (e) {
    alert(back);   //this alerts true
    if(back==true)
        return false;
        //e.preventDefault;   --this does not work too
};
Run Code Online (Sandbox Code Playgroud)

但这不起作用.我的意思是当我点击后退按钮时,这个onbeforeunload仍然会触发,即使我返回false,我仍然会收到确认消息.什么可能是错的?谢谢

javascript

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

在python字典中插入或更新键

我有一个dict1包含超过20,000个键的python字典,我希望update用另一个字典dict2.字典看起来像这样:

dict1
  key11=>[value11]
  key12=>[value12]
  ...
  ...
  keyxyz=>[value1x]      //common key
  ...... so on

dict2
  key21=>[value21]
  key22=>[value22]
  ...
  ...
  keyxyz=>[value2x]      // common key
  ........ so on
Run Code Online (Sandbox Code Playgroud)

如果我使用

dict1.update(dict2)
Run Code Online (Sandbox Code Playgroud)

然后其键dict1与键的类似dict2将使其值被值覆盖dict2.我想要的是如果一个键已经存在于dict1中,那么dict2中该键的值应该附加到dict1的值.所以

dict1.conditionalUpdate(dict2)
Run Code Online (Sandbox Code Playgroud)

应该导致

dict1
  key11=>[value11]
  key12=>[value12]
  key21=>[value21]
  key22=>[value22]
  ...
  ...
  keyxyz=>[value1x,value2x]
Run Code Online (Sandbox Code Playgroud)

一种天真的方法是迭代dict2每个键的键dict1并插入或更新键.有更好的方法吗?python是否支持支持这种功能的内置数据结构?

python algorithm dictionary

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