我正在使用 MongoDB,我的字段名称是 10-20 个字符的字符串。一个典型的文档由 30.000 列组成,其中大部分是浮点数,如 1.2、10.5、2.55。它的大小是 1MB。
长字符串字段名称会影响 MongoDB 数据库的大小吗?
在今天的一个线程中,我希望在插入记录时立即执行代码,而不是求助于轮询。
触发器是强大的工具,但也是放置真实代码的危险场所,因为如果代码缓慢或阻塞,事务就会阻塞,这可能会成为一个真正的问题。
就我而言,轮询是不可行的。我真的需要我的代码在记录出现时立即执行。Windows 应用程序正在向表中插入数据。我没有应用程序的来源,无法更改它。我可以完全访问 SQL Server。
但是将严肃的代码放入触发器中确实是一种不好的做法。
所以问题就变成了:与触发器一样响应的触发器的替代方案是什么?(或者几乎和响应一样......延迟 1-5 秒就可以了,但是 30 秒的轮询周期确实令人不快。要运行的代码需要 0-3 秒才能完成。)
约束:
手头的工具(不全面): - .NET - Python - C#
如果可能的话,希望避免使用 xp_cmdshell。
当出现 id 冲突时,我想让 Psycopg2 更新col1、col2和col3。
在我的 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的语法是什么?
我正在开发网络身份验证系统,用户将对随机令牌进行数字签名,这将使用存储在服务器上的 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 列。
不幸的是,这个解决方案有两个缺点:
所以..有人有更好的主意或建议吗?也许有人看到此解决方案可能出现的任何其他安全问题?
当 SQL Server 使用 SQL Launchpad 启动外部运行时(例如 R 或 Python)时sp_execute_external_script,外部运行时进程的生命周期是多少?
每个sp_execute_external_script脚本执行是否都有自己的外部流程实例,或者外部流程是否会一直存在,直到它在一段时间内处于非活动状态(例如,如果我使用相同的 SQL 会话执行以相同语言编写的另一个脚本,则现有流程可能会被重用) )?
在我们的一种环境中,我们使用 psycopg2 从 python 脚本执行相当繁重的查询。执行时间超过 10 分钟,但我们得到了结果并且可以使用接收到的数据。
当我们将相同的脚本移动到不同的环境时,大约 5 分钟后我们会收到错误:psycopg2.InterfaceError:连接已关闭
原因可能是什么?
我正在使用 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)
有谁知道是否可以这样做?
我尝试过谷歌搜索,但没有太多回来。我想,由于这是一个新功能,社区中还没有大量的知识。
这是我的代码:
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 开始的自动增量值。我该怎么做?
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) 我成功安装了 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 的虚拟环境目录吗?
python ×10
postgresql ×4
sql-server ×3
insert ×1
mongodb ×1
orm ×1
pgadmin ×1
r ×1
sql-clr ×1
sqlalchemy ×1
ubuntu ×1
upsert ×1