小编fdm*_*ion的帖子

SQL基础知识:如何在一个查询中从多个表中获取详细信息?

我已经使用SQL多年,但从未真正利用它的潜力.

对于这个例子,假设我有两个表:

CREATE TABLE messages (
    MessageID INTEGER NOT NULL PRIMARY KEY,
    UserID INTEGER,
    Timestamp INTEGER,
    Msg TEXT);

CREATE TABLE users (
    UserID INTEGER NOT NULL PRIMARY KEY,
    UserName TEXT,
    Age INTEGER,
    Gender INTEGER,
    WebURL TEXT);
Run Code Online (Sandbox Code Playgroud)

据我所知,PRIMARY KEY基本上对该字段编制索引,以便以后可以将其用作快速搜索 - 基于主键的确切值查询即使在巨大的表中也能非常快速地获得结果.(这也强制说明每个记录中的字段必须是unqiue.)

在我目前的工作流程中,我会做类似的事情

SELECT * FROM messages;
Run Code Online (Sandbox Code Playgroud)

然后在代码中,对于每条消息,执行:

SELECT * FROM users WHERE UserID = results['UserID'];
Run Code Online (Sandbox Code Playgroud)

这显然听起来非常低效,我知道它可以做得更好.

我最终想要的是一个包含所有字段的结果集messages,除了代替UserID字段,它包含users表中与给定UserID匹配的所有字段.

有人可以给我一个关于如何完成这类事情的快速入门书吗?

如果重要的话,我使用SQLite3作为SQL引擎,但我也想在MySQL上做这个.

谢谢!

sql

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

从C#测试AES-NI指令

我想知道是否有办法在C#.NET的主机系统CPU中测试AES-NI 的存在.

让我先说这个问题不是询问如何使用 .NET中的AES-NI.事实证明,只要AESCryptoServiceProvider使用AES-NI就可以使用它.这个结果基于独立的基准测试,我比较了AESCryptoServiceProviderTrueCrypt提供的基准测试的性能,确实支持AES-NI.在使用和不使用AES-NI的两台机器上,结果令人惊讶地相似.

我希望能够测试它的原因是能够向用户表明他们的计算机支持AES-NI.这将是相关的,因为它将减少涉及诸如"但我的朋友也有Core i5但是他的速度快得多的问题"的支持事件.如果程序的用户界面可以向用户指示他们的系统支持或不支持AES-NI,则还可以指示"由于该系统不支持AES-NI,因此性能较低是正常的".

(我们可以感谢英特尔对不同处理器步进的所有困惑!:-))

有没有办法通过WMI检测这些信息?

.net c# aes

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

如何直接访问 Py2app(或 Py2exe)程序中的资源?

这主要用于 Py2app,但我也计划移植到 Windows,因此 Py2exe 也适用。

对于 Mac:如何从 Python 代码访问我的应用程序包的 Resources 文件夹?对我来说,理想的方法是将此文件夹的路径放入一个变量中,我的类将其添加到他们需要访问的任何文件中。鉴于 OSX 应用程序包的可移植性,此资源文件夹可以移动,因此假设它始终位于 /Applications/MyApp.app/Contents/Resources 显然是不可接受的。

对于开发,我可以将此变量预设为“./Resources-test”之类的内容,但对于最终发行版,我需要能够找到 Resources 文件夹以将其中的文件作为文件对象访问。

对于 Windows:如果我使用 py2exe,那么获取应用程序运行路径的正确方法是什么?(想想便携式应用程序 - 该应用程序可能从程序文件、某人闪存驱动器上的目录或临时目录中运行!)在 Windows 上,只需知道 .exe 文件的位置并只有一个资源文件夹那里。(我计划使用 wxwidgets 制作跨平台应用程序。)

谢谢

python resources py2app

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

在Python中存储对基本类型的引用?

码:

>>> a = 1
>>> b = 2
>>> l = [a, b]
>>> l[1] = 4
>>> l
[1, 4]
>>> l[1]
4
>>> b
2
Run Code Online (Sandbox Code Playgroud)

我想要反而看到的是当我将l [1]设置为等于4时,变量b变为4.

我猜测在处理基元时,它们是按值复制的,而不是通过引用复制的.我经常看到人们遇到物体问题,需要了解深层副本等.我基本上想要相反.我希望能够在列表中存储对基元的引用,然后能够通过使用其实际变量名称b或列表中的引用为该变量分配新值l[1].

这可能吗?

python reference

5
推荐指数
2
解决办法
1400
查看次数

Python:迭代通过对象执行代码在某些地方以及最后

这是一些示例代码来解释:

outputText=""
counter=0
for obj in specialObjects:
    if (obj.id < 400) or (obj.name.startswith("he")) or (obj.deliberateBreak==True):
        print "The object %s is causing a section break."%obj.details
        outputText = outputText.rjust(80)
        open("file%d.txt"%counter,"w").write(outputText)
        outputText=""
    outputText+=obj.shortValue()
# THIS CODE IS DUPLICATED
outputText = outputText.rjust(80)
open("file%d.txt"%counter,"w").write(outputText)
Run Code Online (Sandbox Code Playgroud)

我需要做的是迭代这些特殊对象的列表,并每次检查几个不同的条件.如果满足任何条件(如此处所示),那么我需要获取当前输出缓冲区,将其写入文件,然后启动新的输出缓冲区并继续处理.

这里的问题是代码重复.注意两行(outputText =和open)是如何重复的.如果我没有放入第二组行,则将处理最后一组对象,但它们的输出将永远不会被写入.

我可以想到两种可能的解决方案来防止代码重复.它们都显得略显不雅,所以我想知道是否有更好的方法.

1)包装将在函数中重复的代码.

outputText=""
counter=0
for obj in specialObjects:
    if (obj.id < 400) or (obj.name.startswith("he")) or (obj.deliberateBreak==True):
        print "The object %s is causing a section break."%obj.details
        counter = writeData(outputText)
        outputText=""
    outputText+=obj.shortValue()
writeData(outputText,counter)

def writeData(outputText,counter):
    outputText = outputText.rjust(80)
    open("file%d.txt"%counter,"w").write(outputText)
    return …
Run Code Online (Sandbox Code Playgroud)

python list code-duplication

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

增加在 Azure 上运行的 Dockerized ASP.NET Core 站点的最大上传大小限制?

以下是应用程序的架构:

  • 使用 ASP.NET Core 编写的 Web API。
  • Dockerfile 使用 构建 Web 应用程序microsoft/dotnet:2.1-sdk并使用 执行 API microsoft/dotnet:aspnetcore-rumtime。该应用程序被编译并放入/app.
  • 启动 API 所执行的命令是:ENTRYPOINT ["dotnet", "/app/WebAPI.dll"]
  • 此 API 部署到 Azure 容器注册表(Docker 注册表)。
  • Azure 应用服务用于托管 API。应用服务配置为从 ACR 中提取给定容器。
  • API 完全按照预期运行。

问题是我们需要接受大于 IIS 和 Kestrel 规定的 28.6MB 限制的帖子正文大小。我们已尝试此 URL 上的方法,但没有成功:https://www.talkingdotnet.com/how-to-increase-file-upload-size-asp-net-core/

  • 将 Web.config 文件添加到项目中并没有帮助,因为容器中运行的 ASP.NET Core 运行时不会拾取该文件。(容器内只有 Kestrel 正在运行)
  • 添加[RequestSizeLimit]属性并不能解决问题,因为我相信实际的限制发生在 Azure 级别。
    • 如果我理解正确的话,在容器内的 Kestrel 上运行的 Dockerized ASP.NET Core 应用程序是从 Azure IIS 服务器进行反向代理的。因此 IIS 服务器可能存在 28.6MB 限制。
  • 设置大小限制UesKestrel也没有效果。
  • 当我们尝试实现“中间件”解决方案时,我们发现这不是页面代码中给出的对象 …

azure kestrel azure-web-app-service asp.net-core

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

设置空闲线程/信令线程

我正在使用Python和wxPython来编写应用程序.

我正在考虑实现这个方法可能不是最好的 - 如果是这样的话,请告诉我,因为我愿意重构.

现在,我有一个GUI表单.主程序起始点实例化GUI表单的实例然后运行wx.mainLoop(),这会导致应用程序的主要初始线程在应用程序的生命周期内阻塞.

我们当然知道,当UI中发生事件时,UI线程会为它们运行代码.

现在,我有另一个线程 - 一个工作线程.这个线程需要闲置,然后当UI线程中发生某些事情时,例如点击一个按钮,我希望工作线程停止空闲并执行其他操作 - 运行一个函数,比方说.

我现在无法想象这一点,但我可以看到,当应用程序变得更复杂时,还必须发出工作线程,而实际上正忙着做某事.

关于此设置,我有两个问题:

  1. 如何在不耗尽CPU时间的情况下使我的工作线程空闲?做类似的事情while True: pass会吸引CPU时间,而类似的东西while True: time.sleep(0.1)不会对事件做出即时反应.

  2. 向工作线程发出信号的最佳方式是什么?我不希望UI线程执行某些操作,我希望UI线程发出工作线程信号,它应该改变它正在做的事情.理想情况下,我可以通过某种方式让工作线程向UI本身注册回调,这样当单击按钮或发生任何其他UI事件时,工作线程会发出信号以更改其正在执行的操作.

那么,这是实现这一目标的最佳方式吗?什么是最好的方法呢?

谢谢!

python multithreading wxpython

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

ASP.NET Web API:如何跨请求创建持久集合?

我有一个 Web API,它为 Angular.JS Web 应用程序提供后端。后端 API 需要跟踪用户活动的状态。(例如:需要记录用户上次从 API 中检索到的内容 ID)

对 API 的大多数访问都通过用户名/密码进行身份验证。对于这些实例,我可以将用户状态存储在我们的数据库中。

但是,我们确实需要允许“访客”访问该服务。对于来宾,状态确实需要跟踪,但不应长期保持(例如会话级跟踪)。我真的不想在我们的用户表中生成“伪用户”,只是为了存储来宾用户的状态,不需要长时间维护。

我的计划是生成一个随机值并将其作为 cookie 存储在客户端中。(仅适用于客人 - 我们对经过身份验证的用户使用不记名身份验证。)然后我将使用随机值作为密钥将任何必要的状态存储在内存对象中,例如字典。然后我可以定期使字典中的项目过期。如果 Web API 重新启动,这些数据丢失是完全可以接受的,甚至可以接受字典重置,比如每天的某个时间。

我不知道如何在 WebAPI 中做的是创建字典对象,以便它在 Web API 调用中保持不变。我基本上需要一个单例字典对象,只要服务器运行 Web API,它就会保持其内容(除非计划清除或程序化刷新)

我的想法是每次进行 API 调用时将字典转储到磁盘,然后在需要时将其读回,但这不允许多个同时进行的请求。我现在能想到的唯一方法是添加另一个数据库表(guest_state 或其他东西)并复制用户表,然后设置某种手动方法来定期清理来宾表中的数据。

总结:我需要的是

  • 一种将一些数据持久存储在 Web API 后端中而不必转到数据库的方法
  • 最好将此数据存储在 Dictionary 对象中,以便我可以使用随机生成的会话 ID 作为键,并使用一个对象来存储状态
  • 数据可以在设定的时间段后或定期清除(不要频繁,可能至少有 6 小时的持久性)

c# asp.net-web-api

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

C#/OWIN/ASP.NET:我可以*手动*在我的 API 代码中生成和获取有效的不记名令牌字符串吗?

OAuthAuthorizationServer在 OWIN ASP.NET C# web API 中使用 OWIN库来生成和处理不记名令牌。

现在,我有一个端点(您在OAuthAuthorizationServerOptions结构中设置),它接受来自前端的grant_type,usernamepassword字段。我创建了一个执行验证的提供程序类,然后相应地调用context.Validated()context.SetError()。然后中间件处理生成令牌并将其返回给用户,并“接管”登录端点,在内部完成所有工作。

现在,我正在向我的 API 添加一个新功能,用户可以在其中更改他们的“角色”(例如,管理员可以将自己设置为普通用户以查看他们的工作结果,用户可以在多个角色中进行选择等)由于我已经通过不记名令牌处理了这个问题(我将用户的角色存储在那里,我的所有端点都使用不记名令牌来确定当前角色),我现在有理由从 API 后端更新不记名令牌的内容。

我想要做的是允许前端调用api/set_role将接受参数的端点(例如)。用户请求某个角色,他们当前的不记名令牌将伴随请求。然后服务器将检查是否允许相关用户使用该特定角色,如果允许,将生成一个新令牌并将其在响应正文中返回给用户。然后前端将在本地存储中更新其令牌。或者,当然,如果不允许用户切换到该角色,后端会返回适当的错误,前端会做出相应的反应。

为此,我基本上希望能够手动生成令牌。与我identity.AddClaim()在登录提供程序中的使用方式类似,我希望能够在 API 代码中的任意位置执行此操作。该方法将负责将任何必要的现有信息(例如用户的用户名)转移到新令牌中,因为它已经拥有现有的令牌。

我想要的伪代码:

if (!userCanUseRole(requestedRoleId)) return Request.CreateErrorResponse(...);
// we have a struct containing parsed information for the current token in the variable cToken
bearerToken newToken = new bearerToken();
newToken.AddClaim(new Claim("user", cToken.user));
newToken.AddClaim(new Claim("role", requestedRoleId));
string tokenToReturnToFrontend = newToken.getTokenString(); // string suitable for using in Authorization Bearer …
Run Code Online (Sandbox Code Playgroud)

asp.net oauth bearer-token

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

使用 docker build 和 tmpfs 构建 Docker 映像?

问题:如何在 Dockerfile 或docker build命令行中指定要在构建容器中安装 tmpfs?这是在拆分构建的上下文中 - 第一个容器将使用 RAM 磁盘,从源构建应用程序,第二阶段将结果复制到新容器中。

这个问题看起来很相似,但我的动机不同。我不太关心持续存在的陈旧图像层,但我关心构建的性能。在 Docker 之外进行试验时,当整个源代码树在 RAM 中而不是在磁盘上时,构建我正在使用的特定应用程序的速度要快 4 倍以上。(该项目有许多中间构建和并行性,所以即使是 SSD 也会有一些颠簸)

由于 Docker 确实支持在正常docker run命令期间挂载 tmpfs ,似乎应该有一种方法可以将其包含在 Dockerfile 中?但是,我似乎无法在任何地方找到此信息 - 几乎所有对“tmpfs”和“dockerfile”或“build”或“ramdisk”等的搜索都指向上面链接的帖子或 Docker 中使用 tmpfs 的文档容器以docker run.

如果 tmpfs 甚至不会持续到第二个容器的程序集,那也是可以接受的。这可以通过在该容器退出之前从构建容器内的 tmpfs 中复制构建的应用程序,然后在复制时使用该新位置来简单地解决。

ramdisk tmpfs docker dockerfile

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