标签: orm

ORM 框架与数据库中的直接查询相比

我想写一个仓储程序。

谁能指导我使用数据库层框架。

我以前使用过实体框架,但我不喜欢它,因为它会引发很多未知错误。

有没有人建议使用 nhibernate 或任何其他框架,或者您认为如果我使用直接查询或存储过程,它会更可靠更好吗?

c# database orm

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

PHP 在性能方面最好的 orm?

就性能而言,以下哪一项是 PHP 的最佳 ORM?我也想在 Codeigniter 框架中使用它。我现在正在尝试 php-activerecord,它的表现还不错。我查看了 Doctrine2、DataMapper 之类的东西,但是在我构建一个大项目之前我无法谈论任何关于性能的信息(那时,改变主意为时已晚)。

有什么想法吗?

php performance orm codeigniter

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

Hibernate ManyToMany 相同的 JoinColumn 名称

我有两个实体类ActivityUser. 它们之间的关系是:

  • 一个人Activity可以有一个或多个User
  • 一个User可以属于一个或多个Activity

所以为了实现这一点,我定义@ManyToMany了它们之间的映射。下面是我的课:

Activity

@javax.persistence.Entity
@Table(name = "ACTIVITY")
public class Activity extends Entity {

    @Transient
    private static final long serialVersionUID = 4741665931936809028L;

    private Set<User> users;

    public Activity() {
        super();
    }

    @ManyToMany(targetEntity = User.class, cascade = { CascadeType.ALL })
    @JoinTable(name = "ACTIVITY_USER", joinColumns = @JoinColumn(name = "ID"), inverseJoinColumns = @JoinColumn(name = "ID"))
    public Set<User> getUsers() {
        return users;
    }

    public void setUsers(Set<User> users) {
        this.users = …
Run Code Online (Sandbox Code Playgroud)

orm many-to-many hibernate hibernate-mapping hibernate-4.x

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

Symfony 学说 orderby 和 group by (distinct)

我正在尝试获取最新预订的课程(唯一)。我已经尝试使用 Doctrine 查询构建器进行以下操作:

$repository = $this->getDoctrine()->getRepository('AppBundle:Booking');

$query = $repository->createQueryBuilder('b')
->select('(b.course) AS course')
->orderBy('b.id', 'DESC')
->groupBy('b.course')
->setMaxResults(5)
->getQuery();
Run Code Online (Sandbox Code Playgroud)

没有 orderby 它可以工作,但它将遍历预订升序。我需要最新预订的课程。通过此查询,我收到此错误:

SQLSTATE[42000]:语法错误或访问冲突:1055 ORDER BY 子句的表达式 #1 不在 GROUP BY 子句中,并且包含非聚合列......它在功能上不依赖于 GROUP BY 子句中的列;这与 sql_mode=only_full_group_by 500 Internal Server Error - DriverException 不兼容

我还尝试了以下方法:

$em = $this->getDoctrine()->getManager();
$query = $em->createQuery(
   'SELECT DISTINCT c.id
    FROM AppBundle:Booking b
    JOIN b.course c
    ORDER BY b.id DESC'
);
Run Code Online (Sandbox Code Playgroud)

SQLSTATE[HY000]:一般错误:3065 ORDER BY 子句的表达式 #1 不在 SELECT 列表中,引用列...不在 SELECT 列表中;这与 DISTINCT 不兼容

现在我已经搜索了解决方案,基本上找到了很多禁用ONLY_FULL_GROUP_BY的建议。禁用 ONLY_FULL_GROUP_BY

一些评论指出,为了遵守 sql 标准而这样做是不明智的。那么这怎么可能以一种有效的方式实现呢?

mysql sql orm symfony doctrine-orm

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

为什么 select_for_update 在并发插入中有效?

我有一个代码,应该在并发请求和重负载下工作。

我写了一个例子来更好地理解我正在尝试做的事情:

def add_tag():
    with transaction.atomic():
        image = Image.objects.get(pk=2)
        tag = Tag.objects.get(pk=6)

        image.tags.add(tag) # concurrent insert

    return 'done'


class Command(BaseCommand):
    def handle(self, *args, **options):
        with ProcessPoolExecutor(max_workers=3) as executor:
            futures = []
            for _ in range(3):
                futures.append(executor.submit(add_tag))

            for future in as_completed(futures):
                print(future.result())
Run Code Online (Sandbox Code Playgroud)

这是我的模型:

class Image(models.Model):
    title = models.CharField(max_length=255)
    tags = models.ManyToManyField('ov_tags.Tag')

class Tag(models.Model):
    title = models.CharField(max_length=255)
Run Code Online (Sandbox Code Playgroud)

我正在尝试并行插入 ManyToMany 关系表。显然,由于 READ COMMITED 隔离级别的原因,这会导致错误:

django.db.utils.IntegrityError: duplicate key value violates unique constraint
Run Code Online (Sandbox Code Playgroud)

绝对没问题,但是如何彻底消除这个错误呢?

为了保护我的图像,我尝试在图像选择上使用 select_for_update 。

image = Image.objects.select_for_update().get(pk=2)
Run Code Online (Sandbox Code Playgroud)

而且...它有效!我运行了好几次。不再有错误并且项目插入正确。但我不知道为什么?

select_for_update 是否锁定关系表?或者它发生在应用程序端?有没有正确的方法来实现这种行为?

我可以使用空选择来锁定插入吗?

SELECT …
Run Code Online (Sandbox Code Playgroud)

python sql django postgresql orm

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

当我使用过滤器检查相同的参数时,get_or_create 返回错误,即存在多个对象值,它返回 0 个对象

我正在尝试使用get_or_create方法来查看记录是否存在。如果记录存在,则什么都不做,否则创建它。

这个模型基本上用在失败的命令上

 class modelStudentExamsPerformed(models.Model):
        patient = models.ForeignKey(modelPatient)
        student = models.ForeignKey(modelStudent,on_delete=models.CASCADE)
        normalBodyPart = models.ForeignKey(modelNormalBodyPartResult,default=None,blank=True,null=True)
        abnormalBodyPart = models.ForeignKey(modelAbnormalBodyPartResult,default=None,blank=True,null=True)
        tool = models.CharField(max_length=128, default="")
Run Code Online (Sandbox Code Playgroud)

现在这是使用上述模型但失败的命令

exams.modelStudentExamsPerformed.objects.get_or_create()(patient=patient_qset, student=stud_qset,abnormalBodyPart=qset[0],normalBodyPart=None,date=None)
Run Code Online (Sandbox Code Playgroud)

上面的语句给了我错误:

get() returned more than one modelStudentExamsPerformed -- it returned 2!
Run Code Online (Sandbox Code Playgroud)

现在这是我遇到麻烦的地方。当我通过我的管理员查看数据库时,我确实注意到两个对象,但这些对象都有一个关联的值normalBodyPart并且它们abnormalBodyPart是空的。既然我明确指定并分配了一个值,abnormalBodyPart为什么 django 说两个项目已经存在?我希望这是有道理的 。

让我们以另一种方式解释这一点,假设有两个语句 1 和 2。语句 1 根据指定的参数获取或创建记录。这个 get 或 create 失败,因为 django 认为已经有两条记录。但是语句 2 使用相同的确切参数并返回 0 条记录。这是为什么 ?我在这里缺少什么和不理解?

声明 1:

exams.modelStudentExamsPerformed.objects.get_or_create()(patient=patient_qset, student=stud_qset,abnormalBodyPart=qset[0],normalBodyPart=None,date=None)
Run Code Online (Sandbox Code Playgroud)

当显然该表中的所有对象都没有 的值时abnormalBodyPart。我通过执行以下操作验证了这一点

声明 2:

k = exams.modelStudentExamsPerformed.objects.filter(patient=patient_qset, student=stud_qset,abnormalBodyPart=qset[0], normalBodyPart=None,date=None)
Run Code Online (Sandbox Code Playgroud)

上面的语句 2 …

django orm django-models django-orm

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

JPA中与postgreSQL的DECIMAL相对应的Java数据类型是什么?

CREATE TABLE band (
    length      DECIMAL(6, 3) PRIMARY KEY NOT NULL,
    resolution  DECIMAL(4, 1)             NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

我在postgreSQL数据库中定义了此表,并且正在为我的应用程序使用JPA。我应该在对应的对象属性中使用哪种数据类型Length?我尝试使用,double但出现以下错误:

由以下原因引起:org.hibernate.tool.schema.spi.SchemaManagementException:模式验证:表[band]的列[length]中遇到的列类型错误;找到了[数字(Types#NUMERIC)],但是期望是[float8(Types#DOUBLE)]

postgresql orm jpa

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

无法使用 Column 属性将属性与使用 AsyncPoco 的列名相关联

我正在使用 NuGet 包AsyncPoco v1.2,官方PetaPoco的异步分支——“适合你的 POCO 的一个小 ORM东西”。选择的 DBRM 是 Oracle,但这无关紧要。

到目前为止,经典的 PetaPoco 包一直在工作,但我的问题是 AsyncPoco 包没有使用Column属性的值,而是完全忽略它并简单地使用属性名称作为直接列标识符。

例子:

我创建了 Poco

[PrimaryKey("ID_COL", SequenceName = "SCHEMA.SCHEMA_TABLE_SEQ")]
[TableName("SCHEMA.SCHEMA_TABLE")]
public class PocoModel
{
    [Column("ID_COL")]
    public long Id { get; set; }

    [Column("NAME_COL")]
    public string Name { get; set; }
 }
Run Code Online (Sandbox Code Playgroud)

我为所需的属性赋值,然后尝试执行 InsertAsync

public async Task InsertPoco(PocoModel model, DbConnection conn)
{
    var taskCompletionSource = new TaskCompletionSource<bool>();
    using (var database = new AsyncPoco.Database(conn))
    {
        await database.InsertAsync(model);
        taskCompletionSource.TrySetResult(true);
    }
    await taskCompletionSource.Task;
}
Run Code Online (Sandbox Code Playgroud)

但是,我在尝试 …

c# orm async-await micro-orm

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

NodeJS和ORM?

我已经看过并使用了几个后端框架,如django,RoR,Spring Boot.所有这些都带有内置的ORM.

但NodeJS很受欢迎,因为缺乏内置的ORM.缺乏内置ORM背后的原因是什么?

django orm ruby-on-rails node.js spring-boot

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

在 Django 中,给定一个模型实例,如何确定foreignkey字段是否已完全水合?

语境:

我维护遗留的 Django 代码。在许多情况下,我的代码接收多个模型对象,每个模型对象都有一个ForeignKey或代表相同数据实体的手动缓存属性。因此所涉及的数据实体不会改变。但是,并非我收到的所有对象都曾经访问过这些foreignkey字段或缓存的属性,因此数据可能不会出现在这些对象上,尽管它会在第一次访问时延迟加载。

我不容易访问/控制声明模型的代码。

我想找到我拥有的任何一个具有已准备好的缓存的对象,这样我就可以避免访问数据库来检索我想要的数据(如果没有,我会在必要时这样做)。这是因为该数据的获取过于频繁,导致性能问题。

Django 1.6,Python 2.7。

问题

我可以询问我们手动缓存的字段,并且internal_is_cached(instance, 'fieldname')无需运行查询。但是,我无法对ForeignKey字段执行此操作。

假设我在 Django 中有一个模型类,Foo如下所示:

class Foo(models.Model):
    bar = models.ForeignKey('BarModel')
Run Code Online (Sandbox Code Playgroud)

问题

Foo如果我从某处获取模型的实例,但我不知道是否bar曾经调用过它,或者是否已急切地获取它,我如何确定读取instance.bar是否会查询数据库?

换句话说,我想从外部确定任意模型是否具有针对给定的内部缓存ForeignKey,而关于该模型的状态或来源的其他知识为零。

我尝试过的

  • 我尝试使用 Django 缓存进行模型缓存来解决该问题。相关数据的获取过于频繁,以至于对我们的缓存系统造成了不可持续的负载。

  • 我从这个问题尝试了各种解决方案。它们适用于修改后的模型,但似乎不适用于尚未突变的模型——我对模型的“延迟加载”状态感兴趣,而不是“待修改”状态。其中许多解决方案也不适用,因为它们需要更改模型继承或行为,我希望尽可能避免这种情况(政治)。

  • 这个问题看起来很有希望,但它需要控制模型的初始读者过程。我的代码接收到的模型对象可以来自任何地方。

    • 在测试中,对[本文]中描述的事后缓存启动进行相反的操作对我有用。然而,它依赖于_default_manager模型对象的内部方法,众所周知,这对于我们在生产中的一些(高度定制的)模型对象来说是不准确的字段引用。其中一些非常奇怪,如果可能的话,我更愿意坚持使用记录的(或者至少是稳定的并且不经常被绕过的)API。

python django orm caching foreign-keys

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