标签: python

长字符串字段名称如何影响 MongoDB 数据库大小?

我正在使用 MongoDB,我的字段名称是 10-20 个字符的字符串。一个典型的文档由 30.000 列组成,其中大部分是浮点数,如 1.2、10.5、2.55。它的大小是 1MB。

长字符串字段名称会影响 MongoDB 数据库的大小吗?

mongodb python

7
推荐指数
2
解决办法
3498
查看次数

SQL Server:如何在不阻塞触发触发器的事务的情况下获得触发器的响应能力?

今天的一个线程中,我希望在插入记录时立即执行代码,而不是求助于轮询。

触发器是强大的工具,但也是放置真实代码的危险场所,因为如果代码缓慢或阻塞,事务就会阻塞,这可能会成为一个真正的问题。

就我而言,轮询是不可行的。我真的需要我的代码在记录出现时立即执行。Windows 应用程序正在向表中插入数据。我没有应用程序的来源,无法更改它。我可以完全访问 SQL Server。

但是将严肃的代码放入触发器中确实是一种不好的做法。

所以问题就变成了:与触发器一样响应的触发器的替代方案是什么?(或者几乎和响应一样......延迟 1-5 秒就可以了,但是 30 秒的轮询周期确实令人不快。要运行的代码需要 0-3 秒才能完成。)

约束:

  • 我只能访问数据库,不能访问应用程序
  • SQL Server 2005 和 2008
  • 可行的。我们不希望发明一些疯狂的东西,添加大量基础设施或大型新系统。我们有一个应用程序。它与 SQL Server 对话。添加更多层概率是不可能的。
  • 实现另一个服务器应用程序(如 msg 队列服务器等)对于这个项目是不可行的。这东西一天只会开一到十五次。

手头的工具(不全面): - .NET - Python - C#

如果可能的话,希望避免使用 xp_cmdshell。

sql-server sql-clr python

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

PostgreSQL/Psycopg2 upsert 语法更新列

当出现 id 冲突时,我想让 Psycopg2 更新col1col2col3

在我的 Python 代码中,我目前的插入 SQL 为:

insert_sql = '''INSERT INTO {t} (id,col1,col2,col3)
        VALUES (%s,%s,NULLIF(%s, 'nan'), NULLIF(%s, 'nan'))
        ON CONFLICT (id)
        DO NOTHING;'''
Run Code Online (Sandbox Code Playgroud)

基本上我想设置而不是什么都不做:

(col1,col2,col3) = (%s,NULLIF(%s, 'nan'), NULLIF(%s, 'nan'))

忽略插入 ID 并更新 col1、col2 和 col3。问题是%s使用 Psycopg2 在 Python 中传递元组变量:

cur.execute(insert_sql.format(t='my_table'),(int(id),new_col1,new_col2,new_col3))
Run Code Online (Sandbox Code Playgroud)

用于引用%s对应于 col1、col2 和 col3 以更新 ON CONFLICT的语法是什么?

postgresql insert python upsert

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

在 PostgreSQL 数据库中存储 X509 证书的最佳方法是什么?

我正在开发网络身份验证系统,用户将对随机令牌进行数字签名,这将使用存储在服务器上的 X509 证书进行检查。

因此我必须在 PostgreSQL 数据库中存储几个 X509 证书(PEM 或 DER 格式)。听起来很简单,但我希望有可能使用主题、颁发者、notBefore、notAfter 和类似标准来搜索证书。

我的想法是在数据库中有以下列:X509data、notAfter、notBefore、subject、issuer 等。然后我将使用 add_new_X509()、find_X509(search criteria) 等方法创建代表 X509 证书的对象(在 SQL 炼金术中)。所以无论何时我将使用 add_new_X509() 方法添加新证书,它将自动从证书中读取所有数据并填写其余列并将原始证书放入 X509data 列。

不幸的是,这个解决方案有两个缺点:

  1. 我将两次存储相同的信息(在 X509 证书本身和单独的列中以便于搜索)
  2. 每当我想读取 X509 证书时,我的应用程序都必须交叉检查 notAfter、notBefore、subject、issuer 以及存储在原始证书中的信息(这是出于安全原因,以防有人尝试修改此字段)。

所以..有人有更好的主意或建议吗?也许有人看到此解决方案可能出现的任何其他安全问题?

postgresql python

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

Launchpad 启动的外部运行时进程的生命周期

当 SQL Server 使用 SQL Launchpad 启动外部运行时(例如 R 或 Python)时sp_execute_external_script,外部运行时进程的生命周期是多少?

每个sp_execute_external_script脚本执行是否都有自己的外部流程实例,或者外部流程是否会一直存在,直到它在一段时间内处于非活动状态(例如,如果我使用相同的 SQL 会话执行以相同语言编写的另一个脚本,则现有流程可能会被重用) )?

sql-server python sql-server-2016 r sql-server-2017

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

psycopg2 连接已关闭

在我们的一种环境中,我们使用 psycopg2 从 python 脚本执行相当繁重的查询。执行时间超过 10 分钟,但我们得到了结果并且可以使用接收到的数据。

当我们将相同的脚本移动到不同的环境时,大约 5 分钟后我们会收到错误:psycopg2.InterfaceError:连接已关闭

原因可能是什么?

postgresql python

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

SQL Server 2017 和外部 Python 模块

我正在使用 SQL Server 2017 中的 Python 集成进行一些 PoC 工作。

我已经完成了基本步骤,并成功完成了此示例: https://learn.microsoft.com/en-us/sql/advanced-analytics/tutorials/run-python-using-t-sql

对于我试图完成的 PoC,我需要一些外部 python 模块(例如tensorflow),这些模块似乎没有附带与 SQL Server 捆绑在一起的标准 python 库。

在标准 python IDE 中,我只需使用 pip 或 git clone 进行安装。如果我在运行 SQL Server 的服务器上执行此操作,它会成功完成,但我似乎无法使用 TSQL 中的外部模块。

错误信息是:

ImportError: No module named 'tensorflow'
Run Code Online (Sandbox Code Playgroud)

有谁知道是否可以这样做?

我尝试过谷歌搜索,但没有太多回来。我想,由于这是一个新功能,社区中还没有大量的知识。

python sql-server-2017

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

如何在SQLAlchemy中设置自动增量值?

这是我的代码:

    class csvimportt(Base):
     __tablename__ = 'csvimportt'

      #id = Column(INTEGER, primary_key=True, autoincrement=True)
      aid = Column(INTEGER(unsigned=True, zerofill=True),
          Sequence('article_aid_seq', start=1001, increment=1),
          primary_key=True)
Run Code Online (Sandbox Code Playgroud)

我想设置一个从 1000 开始的自动增量值。我该怎么做?

postgresql orm python sqlalchemy

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

为什么 MS SQL bigint 类型隐式映射到 float64 python 类型,处理它的最佳方法是什么?

Python 整数类型具有无限精度,因此它能够容纳 MS SQL(64 位)的 bigint 值。当传递给外部脚本时,它仍然隐式映射到 float64 python 类型。

这可能会导致大整数的严重计算错误。

那么为什么它映射到 float64 呢?

我的猜测是:

R 是通过可扩展性架构在 Python 之前添加的,它具有固定精度的整数(32 位)。所以它不能容纳 bigint。所以也许这是一个兼容性问题。

确保精确计算的最佳做法是什么?

简单但可行的想法:将 bigint 作为字符串传递,然后将它们解析为 int。

我知道它在实践中引起问题的可能性很小,但还是很高兴知道。

怎么可能有问题:

我写了一个简单的例子来演示它怎么会是一个问题:

CREATE TABLE #test (
    big_integer BIGINT
);

INSERT INTO #test 
    (big_integer)
VALUES
    (36028797018963968),
    (36028797018963968 + 1);

EXECUTE sp_execute_external_script 
    @language = N'Python',
    @input_data_1 = N'SELECT big_integer FROM #test',
    @script = N'
print(InputDataSet.dtypes)
OutputDataSet = InputDataSet
'
Run Code Online (Sandbox Code Playgroud)

在 SQL Server 2019 上执行此代码将为您提供以下结果:

| | (No column name) …
Run Code Online (Sandbox Code Playgroud)

sql-server python external-scripts

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

如何在 Ubuntu 16.04 上卸载 pgAdmin4?

我成功安装了 pgAdmin4

pip install pgadmin4-2.0-py2.py3-none-any.whl
Run Code Online (Sandbox Code Playgroud)

但是之后,pip list没有显示与 pgAdmin 相关的任何内容,所以我不知道要传递给pip uninstall <package_name>.

如果我这样做pip uninstall pgadmin4,我会得到:

无法卸载要求 pgadmin4,未安装

我应该删除安装 pgAdmin 的虚拟环境目录吗?

ubuntu pgadmin python

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