小编e4c*_*4c5的帖子

在ON CONFLICT子句中使用多个conflict_target

我在表中两列col1,col2他们都是独一无二的索引(COL1是唯一的,因此是COL2).

我需要插入到这个表中,使用ON CONFLICT语法并更新其他列,但我不能同时使用两个列in conflict_target子句.

有用:

INSERT INTO table
...
ON CONFLICT ( col1 ) 
DO UPDATE 
SET 
-- update needed columns here
Run Code Online (Sandbox Code Playgroud)

但是如何为几个列执行此操作,如下所示:

...
ON CONFLICT ( col1, col2 )
DO UPDATE 
SET 
....
Run Code Online (Sandbox Code Playgroud)

postgresql upsert postgresql-9.5

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

为Robolectric提供SharedPreferences的测试数据

刚刚开始使用Robolectric,它似乎是我所需要的.但是,我在使用SharedPreferences方面遇到了一些障碍.

我有两个测试用例

  1. Activity需要一个新的/空的sharedPreferences

  2. Activity期望sharedPreferences中包含一些数据

对于测试用例1,测试按预期传递,所以很好:)

但是,对于测试案例2,我似乎无法找到一个很好的方法来为Robolectric提供一些虚假数据,因此Activity能够访问这些假数据.

感觉就像一个非常常见的用例,但我似乎无法弄清楚如何做到这一点!

java android robolectric android-testing

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

使用php和mysql的通知系统

我想为我们学校实施一个通知系统,它是一个不为公众开放的php/mysql webapp,因此它不会收到太多流量."每日500-1000名访客".

1.我最初的方法是使用MYSQL触发器:

我使用Mysql AFTER INSERT trigger将记录添加到名为的表中notifications.就像是.

'CREATE TRIGGER `notify_new_homwork` AFTER INSERT ON `homeworks`
 FOR EACH ROW INSERT INTO `notifications` 
    ( `from_id`, `note`, `class_id`) 
 VALUES 
    (new.user_id, 
        concat('A New homework Titled: "',left(new.title,'50'),
        '".. was added' )
    ,new.subject_id , 11);'
Run Code Online (Sandbox Code Playgroud)

这种黑魔法工作得非常好,但我无法跟踪这个通知是否是新的"显示用户新通知的数量".所以我添加了一个名为notification的页面.

通过类似的方式检索通知

SELECT n.* from notifications n 
JOIN user_class on user_class.class_id = n.class_id where user_class.user_id = X;
Run Code Online (Sandbox Code Playgroud)

注意:表user_class将用户链接到类"user_id,class_id,subject_id"-subject为null,除非用户是教师'

现在我的下一个挑战是.

  1. 如何跟踪每个用户的新旧通知?
  2. 如何将与用户类似的通知聚合到一行?

例如,如果2个用户对某些内容发表了评论,那么就不要插入新行,只需使用"userx和其他1个在hw上注释"的内容更新旧行.

非常感谢

编辑

根据下面的答案,要在行上设置读/未读标志,我需要为每个学生设置一行而不仅仅是整个类的一行..这意味着将触发器编辑为类似

insert into notifications (from_id,note,student_id,isread)
select new.user_id,new.note,user_id,'0' from user_class where user_class.class_id = new.class_id group by …
Run Code Online (Sandbox Code Playgroud)

php mysql notifications triggers

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

- Django迁移中的初始vs -fake?

--fake-initial--fakeDjango迁移有什么区别?使用虚假迁移有哪些危险?有人知道吗?非常感谢大家.

我正在使用django 1.10

django django-models django-orm django-migrations

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

如何查看django sqlite3 db的数据库和模式

我是django框架的新手.

我尝试按照djangogirls教程创建一个简单的博客.

默认情况下,我们将sqlite3作为默认数据库引擎

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
Run Code Online (Sandbox Code Playgroud)

我也尝试了一些ORM查询,甚至执行了一些行sql查询

在我的django项目中,我有这个db.sqlite3文件

blog  db.sqlite3  env  manage.py  mysite
Run Code Online (Sandbox Code Playgroud)

我的问题:如何知道django在这个db.sqlite3中创建的模式(我知道mysql,我可以看到有关每个数据库和表的详细信息,所以在这里我只想知道sqlite中的更多内容)

我的系统中有sqlite3,我尝试过.database命令,但它只显示了我

seq  name             file                                                      
---  ---------------  ----------------------------------------------------------
0    main 
Run Code Online (Sandbox Code Playgroud)

python sqlite django

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

post_save信号未被调用

我已经阅读了所有相关问题.

我有两个Django项目,信号在一个工作正常,但不在第二个工作(我只是分别复制粘贴代码和更改名称).

我有订单模型的订单应用程序.应用程序包含在INSTALLED_APPS设置中.

我在apps.py中有app配置:

from django.apps import AppConfig


class OrdersConfig(AppConfig):
    name = 'orders'

    def ready(self):
        super(OrdersConfig, self).ready()

        # noinspection PyUnresolvedReferences
        import signals
Run Code Online (Sandbox Code Playgroud)

__init__.py:

default_app_config = 'orders.apps.OrdersConfig'
Run Code Online (Sandbox Code Playgroud)

最后,signals.py:

@receiver(post_save, sender=Order)
def order_save(sender, instance, created, **kwargs):
    print 'Post save'
    if created:
        print 'Created'
        send_email_new_order.delay(settings.MODERATOR_EMAIL, instance.pk)
Run Code Online (Sandbox Code Playgroud)

信号没有被调用.为什么?

Django 1.10.3.

python django django-signals django-models

17
推荐指数
2
解决办法
7537
查看次数

GoogleApiClient.connect()'应该是类型接口,但被发现是虚拟的

所以我连接到像这样的谷歌api客户端.

        googleApiClient = new GoogleApiClient.Builder(context)
        .addApi(LocationServices.API)
        .addApi(ActivityRecognition.API)
        .addConnectionCallbacks(this)
        .addOnConnectionFailedListener(this)
        .build();
        googleApiClient.connect();
Run Code Online (Sandbox Code Playgroud)

这个完全相同的代码我在几个地方使用,它运作良好.它与您在教程中看到的没有什么不同.但现在:

java.lang.IncompatibleClassChangeError:方法'void com.google.android.gms.common.api.GoogleApiClient.connect()'应该是类型接口,但是发现它是virtual类型的声明(声​​明'java. lang.reflect.ArtMethod'出现在/system/framework/core-libart.jar中)

stacktrace报告的行是:

googleApiClient.connect();
Run Code Online (Sandbox Code Playgroud)

使用游戏服务8.1

compile 'com.google.android.gms:play-services:8.1.0'
Run Code Online (Sandbox Code Playgroud)

有这个吗?

java android

16
推荐指数
2
解决办法
6725
查看次数

尝试在Django 1.9中迁移 - 奇怪的SQL错误"django.db.utils.OperationalError:near")":语法错误"

我不知道是什么导致了这个错误.它似乎是一个没有修复的错误.任何人都可以告诉我如何解决这个问题吗?令我感到沮丧的是,我永无止境.谢谢.

Operations to perform:
  Apply all migrations: admin, contenttypes, optilab, auth, sessions
Running migrations:
  Rendering model states... DONE
  Applying optilab.0006_auto_20160621_1640...Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line 353, in execute_from_command_line
    utility.execute()
  File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line 345, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Python27\lib\site-packages\django\core\management\base.py", line 348, in run_from_argv
    self.execute(*args, **cmd_options)
  File "C:\Python27\lib\site-packages\django\core\management\base.py", line 399, in execute
    output = self.handle(*args, **options)
  File "C:\Python27\lib\site-packages\django\core\management\commands\migrate.py", line 200, in handle
    executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial)
  File "C:\Python27\lib\site-packages\django\db\migrations\executor.py", line 92, in migrate
    self._migrate_all_forwards(plan, …
Run Code Online (Sandbox Code Playgroud)

python sqlite django django-models django-migrations

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

ArrayField中的Django JSONField

我在使用带有JSONField的ArrayField插入字段时遇到问题.

models.py

locations = ArrayField(JSONField(null = True,blank = True), blank=True, null = True)
Run Code Online (Sandbox Code Playgroud)

插入

location_arr = [{"locations" : "loc1","amount":Decimal(100.00)},{"locations" : "loc2","amount":Decimal(200.25)}]
instance.locations = location_arr
instance.save()
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我得到了

列"locations"的类型为jsonb [],但表达式的类型为text []

第1行:...... d"= 2517,"locations"= ARRAY ['{"loc ...

提示:您需要重写或转换表达式.

所以我尝试使用以下方式转储它:

import json
location_arr = [{"locations" : "loc1","amount":Decimal(100.00)},{"locations" : "loc2","amount":Decimal(200.25)}]
instance.locations = json.dumps(location_arr)
instance.save()
Run Code Online (Sandbox Code Playgroud)

然后我得到了这个

第1行:...... d"= 2517,"locations"='[{"loc":......

详细信息:"["必须引入显式指定的数组维度.

我在用:

  1. Django 1.9
  2. Python 2.7
  3. Postgres 9.4.10
  4. psycopg2 2.6.2

python arrays django postgresql json

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

全文索引与正常索引相结合

在我的数据库中,我有一个包含companyId的表,指向公司,以及一些文本.我想做一个FULLTEXT搜索,但因为我总是向特定的公司发出请求.我想使用一个结合了我的companyId和全文索引的复合键.反正有吗?我猜这是不可能的,创建索引的最佳方法是什么,以便以下查询最快?

请求将永远是

SELECT * FROM textTable 
WHERE companyId = ? (Possibly more conditions) AND 
  MATCH(value) AGAINST("example")
Run Code Online (Sandbox Code Playgroud)

我应该正常在整数列上创建索引并添加一个全文索引吗?或者我应该value在索引中包含该列?也许两者?

mysql sql database-design

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