小编Bas*_*ond的帖子

slqlalchemy UniqueConstraint VS Index(unique=True)

我正在使用 MySQL(运行 InnoDB),并使用 sqlalchemy 包装了整个东西。现在,我想使用(参见文档)在我的数据库中生成更改

sqlalchemy_utils.functions.create_database(...)
Run Code Online (Sandbox Code Playgroud)

通常,上面的函数会做它应该做的事情。唯一的例外是唯一索引的生成。

说,我定义了一个这样的表:

## ...
# DeclBase = declarative_base()
## ...
class MyTable(DeclBase):
    __tablename__ = 'my_table'

    id = Column(Integer, primary_key=True)
    attr_1 = Column(String(32))
    attr_2 = Column(Integer, nullable=False)
    attr_3 = Column(DateTime)
    attr_4 = Column(
        Integer,
        ForeignKey('other_table.id', onupdate='CASCADE', ondelete='CASCADE'),
        nullable=False
    )

    u_idx = UniqueConstraint(attr_2, attr_3, 'my_table_uidx')
Run Code Online (Sandbox Code Playgroud)

当我调用 create_database 时,我将让 sqlalchemy 使用指定的所有列创建表“my_table”。外键也设置得很好,但在数据库端找不到唯一索引。然后我尝试使用 Index(unique=True) 代替。所以代替

u_idx = UniqueConstraint(attr_2, attr_3, 'my_table_uidx')
Run Code Online (Sandbox Code Playgroud)

我放

u_idx_1 = Index('my_table_uidx', attr_2, attr_3, unique=True)
Run Code Online (Sandbox Code Playgroud)

我的印象是这在逻辑上产生了类似的结果。这次sqlalchemy确实在db上创建了唯一索引。

也许我对 UniqueConstraint 和 Index(unique=True) 之间的区别,或者 sqlalchemy 使用它们自动生成数据库的方式有一些误解。

任何人都可以对此有所了解吗?

python mysql database sqlalchemy

6
推荐指数
1
解决办法
1472
查看次数

安装 gstreamer 对 opencv python 包的支持

我已经从源代码构建了自己的 opencv python 包。

import cv2
print(cv2.__version__)
Run Code Online (Sandbox Code Playgroud)

打印:3.4.5

现在我面临的问题是关于 opencv 的 VideoCapture 类中的 gstreamer 的使用。我正在尝试让这个最小工作示例在 python3 上运行

cap = cv2.VideoCapture("videotestsrc ! appsink")

if not cap.isOpened():
    print("Cannot capture test src. Exiting.")
    quit()

while True:
    ret, frame = cap.read()
    if ret == False:
        break
    cv2.imshow("CVtest",frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
Run Code Online (Sandbox Code Playgroud)

捕获失败,生成上面的打印内容(请参阅if声明)。我检查了:

import cv2
print(cv2.getBuildInformation())
Run Code Online (Sandbox Code Playgroud)

印刷:

Video I/O:
DC1394:                      NO
FFMPEG:                      NO
  avcodec:                   NO
  avformat:                  NO
  avutil:                    NO
  swscale:                   NO
  avresample:                NO
GStreamer:                   NO
libv4l/libv4l2:              NO
v4l/v4l2:                    linux/videodev2.h
Run Code Online (Sandbox Code Playgroud)

看到这一点,我的 …

python opencv gstreamer python-3.x

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

GLSL曲面位移映射

在我最近的项目中,我正在使用硬件端曲面细分.我想要实现的管道应采用低多边形网格,对其进行细分并应用置换贴图.

Tessellation工作正常,就像我预期的那样.但是,当我在曲面细分评估着色器中应用置换贴图时,我得到一个有点随机的输出.

这是没有位移的输出(我使用高度图作为纹理来验证我的texCoords是否准确)

在此输入图像描述

这是我启用移位时获得的(使用相同的纹理进行着色和置换):

在此输入图像描述

着色器代码如下:

// VERTEX SHADER

#version 430

layout(location = 0) in vec4 vertex;
layout(location = 1) in vec4 normal;
layout(location = 2) in vec2 texCoord;

out vec3 vPosition;
out vec3 vNormal;
out vec2 vTexCoord;

void main() {
    vPosition = vertex.xyz;
    vNormal = normal.xyz;
    vTexCoord = texCoord;
}
Run Code Online (Sandbox Code Playgroud)

// TESS CONTROL

#version 430

layout(vertices = 3) out;

in vec3 vPosition[];
in vec3 vNormal[];
in vec2 vTexCoord[];
out vec3 tcPosition[];
out vec3 tcNormal[];
out vec2 tcTexCoord[];

uniform float innerTessLevel; …
Run Code Online (Sandbox Code Playgroud)

opengl glsl tessellation

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

加速 Qt 中的 Oracle 数据库接口 (QOCI)

我有一个项目涉及将 Oracle 数据库集成到 Qt 桌面应用程序中。由于 Qt 有一个非常易于使用的数据库交互界面,因此我编译了 QOCI 驱动程序来支持 Oracle 连接。

一切工作正常,但查询的处理时间非常慢。我怎样才能提高性能?

我处理任意查询的代码如下所示:

QList< QList<QString> > DBWrapper::executeQuery(QString const& queryString)
{
    QList< QList<QString> > results;
    if (_db.isOpen()) {
        QSqlQuery qry(queryString);
        if(qry.exec()) {
            while(qry.next()) {
                QList<QString> row;
                results.append(row);
                for(int i = 0; i < qry.record().count(); ++i) {
                    results.last().append(qry.value(i).toString());
                }
            }
        } else {
            qDebug() << queryString;
            qDebug() << "FAILURE: cannot handle query.";
            qDebug() << "  > " << qry.lastError();
        }
    } else {
        qDebug() << "Error Opening Database = " << _db.lastError(); …
Run Code Online (Sandbox Code Playgroud)

c++ database oracle qt

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

无法使用QOpenGLWidget读取GL_DEPTH_COMPONENT

我正在为QOpenGLWidget内的3D对象实现简单的单击选择。为此,我需要将2D鼠标坐标转换为3D世界空间。我以前使用QGLWidget实现了整个过程。使用QOpenGLWidget,我无法读取像素的GL_DEPTH_COMPONENT:

float z;
glReadPixels(pixel.x, height - pixel.y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &z);
Run Code Online (Sandbox Code Playgroud)

“ z”始终为0。为确保像素坐标正确,我尝试接收GL_RGBA值:

float rgba[4];
glReadPixels((int)p_temp.x(), (int) (viewport[3] - p_temp.y()), 1, 1, GL_RGBA, GL_FLOAT, rgba);
Run Code Online (Sandbox Code Playgroud)

,它返回正确的像素颜色。为了使它起作用,我不得不将像素坐标的域从局部坐标更改为父坐标。这可能是由于GL_VIEWPORT设置为与父窗口小部件尺寸相对应的事实造成的:

int viewport[4];
glGetIntegerv(GL_VIEWPORT, viewport);
Run Code Online (Sandbox Code Playgroud)

对于QGLWidget,它返回: {0, 0, this->width(), this->height()}

对于QOpenGLWidget,它返回: {0, 0, this->parent()->width(), this->parent()->height()}

顺便说一句,我的OpenGL版本是4.5,使用带有GL_DEPTH_COMPONENT的glReadPixels我没有任何OpenGL错误

现在,我对可能会丢失的东西一无所知。有任何想法吗?

c++ opengl qt

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

将 ada.Containers.Vector 转换为数组

如果我定义了一个数组类型,例如

type Integer_Array is array(Natural range <>) of Integer;
Run Code Online (Sandbox Code Playgroud)

并使用包 Ada.Containers.Vectors 作为

package Integer_Vectors is new Ada.Containers.Vectors(
    Element_Type => Integer,
    Index_Type => Natural);
use Integer_Vectors;
Run Code Online (Sandbox Code Playgroud)

我该如何实现以下功能?

function To_Integer_Array(V : Integer_Vectors.Vector) return Integer_Array;
Run Code Online (Sandbox Code Playgroud)

到目前为止我所拥有的

从概念上讲,这似乎很简单:

  1. Temp_Arr声明为容量为V.Length的Integer_Array
  2. 迭代V并将所有元素复制到Temp_Arr
  3. 返回Temp_Arr

不过,第 1 步让我很头疼。我努力了:

function To_Integer_Array(V: Integer_Vectors.Vector) return Integer_Array is
    Temp_Arr: Integer_Array(1..V.Length);
begin
    -- Todo: copy values here
    return Temp_Arr;
end To_Integer_Array;
Run Code Online (Sandbox Code Playgroud)

这会抛出

expected type "Standard.Integer"
found type "Ada.Containers.Count_Type"
Run Code Online (Sandbox Code Playgroud)

虽然这个错误绝对有道理,但我不确定如何解决它。

有没有办法将 Ada.Containers.Count_Type 转换为 Standard.Integer?还有另一种方法可以从 Integer_Vector 创建 …

arrays vector ada

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

QMYSQL驱动程序加载错误

我今天尝试用Qt运行MySQL,当我加载QMYSQL驱动程序时遇到错误.我正在运行Windows 8.1作为操作系统.这是我的应用程序的代码:

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL", "my_db_name");
    db.setHostName("localhost");
    db.setDatabaseName("mydb");
    db.setUserName("root");
    db.setPassword("testpwd1234");
    if (db.open()) {
        qDebug() << "Opened!";
    } else {
        qDebug() << "Error = " << db.lastError();
    }

    return a.exec();
}
Run Code Online (Sandbox Code Playgroud)

运行它时出现以下错误:

QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL3
Run Code Online (Sandbox Code Playgroud)

我找到了上述错误的多种解决方案,但这些都不适用于我.以下是我验证/尝试的内容列表:

  1. \ Qt\5.4\mingw491_32\plugins\sqldrivers应该包含qsqlmysql.dll和qsqlmysqld.dll
  2. 应将libmysql.dll和libmysqld.dll的路径添加到C:\ windows\System32中包含的Path变量OR中
  3. 应将libmysql.dll和libmysqld.dll添加到\ Qt\5.4\mingw491_32\bin
  4. 将\ Qt\5.4\mingw491_32\plugins\sqldrivers添加到Qt项目的可执行目录.
  5. 将libmysql.dll和libmysqld.dll添加到Qt项目的可执行目录中.

我发现3.,4.和5.有点奇怪,因为我希望正确安装所有内容并设置Path变量不应该要求复制这些文件.无论如何,上述建议都不适合我.

我有点沮丧,并希望得到任何帮助.

谢谢!

c++ mysql dll qt

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

仅限虚幻引擎4代码

我目前正在使用虚幻引擎4.我到目前为止所有的初学者教程都在虚幻编辑器中完成大部分工作,并且只使用C++来扩展虚幻自动生成的所有内容.我想更深入地了解如何主要(或者如果可能)使用C++来编程Unreal.我目前的目标是,完全从代码中设置一个简单的场景.

谁有人建议好的资源?

编辑:所以在熟悉了虚幻引擎的一般概念之后,我意识到大部分游戏开发都是通过使用Blueprint进行可视化脚本编写完成的.有没有办法将脚本语言与虚幻架构连接起来,以替换或集成到Blueprint中?

c++ scripting unreal-engine4

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

将Standard.Natural转换为Ada.Containers.Count_Type

我实例化了Ada.Containers.Vectors通用包,如下所示:

package My_Vectors is new Ada.Containers.Vectors(
    Element_Type => My_Type, 
    Index_Type => Natural);
Run Code Online (Sandbox Code Playgroud)

说,我有一个向量和Standard.Natural值声明:

Foo_Vector: My_vectors.Vector;
Bar_Natural: Natural := 4;
Run Code Online (Sandbox Code Playgroud)

如果我打电话

Foo_Vector.Set_Length(Bar_Natural);
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

expected type "Ada.Containers.Count_Type"
found type "Standard.Natural"
Run Code Online (Sandbox Code Playgroud)

有没有办法将Bar_Natural转换为Ada.Containers.Count_Type

containers ada type-conversion

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