pyodbc和sql server之间的数据转换是如何进行的?

问题描述 投票:0回答:1

我正在构建一个自动化脚本,我使用 pyodbc 将一些数据注入到 sql server 中,这一行(基本示例):

cursor.execute(sql_query, data)

鉴于我已经在本地创建/设计了一个 sql server 数据库和表,数据似乎会自动转换 - “在引擎盖下” - 插入到

db.table
时在表设计中指定的所需类型。

我想知道这是如何工作的,不创建显式代码来转换数据类型是否安全?我在上面找到了这个官方的 Microsoft docs,但我认为那里写的内容并没有让我清楚地将数据从 python 发送到 sql server,因为它指出:

与 SQL Server 相比,Python 支持的数据类型数量有限。因此,无论何时在 Python 脚本中使用来自 SQL Server 的数据,SQL 数据都可能隐式转换为兼容的 Python 数据类型。但是,通常无法自动执行精确转换并返回错误。

这看起来像是来自

SQL Server -> Python
,而不是
Python -> SQL Server

python sql-server pyodbc
1个回答
0
投票

Pyodbc 的 GitHub wiki 有一个页面专门解释它如何将 Python 对象转换为 ODBC 数据类型,反之亦然here.

当您上传数据时,每个 Python 基元和具有直接 SQL 等效项(十进制、日期、uuid)的几个标准库对象都会自动转换为它们的 MS SQL 对应项,因此您不必自己做任何事情转换它们。

在转换会导致数据丢失(例如 int -> bit)或类型不兼容(bool -> date)的情况下,pyodbc 只会抛出一个错误,所以如果发生这种情况你会知道。

这是从 Python -> SQL Server 转换的表格(使用 MS SQL 的名称作为相应的 ODBC 类型):

Python 数据类型 说明 ODBC 数据类型
None
变化*
bool
布尔值
bit
int
整数
bigint
float
浮点数
float
decimal.Decimal
十进制
numeric
str
UTF-16LE*
varchar
*
bytes
,
bytearray
二进制
varbinary
*
datetime.date
约会
date
datetime.time
时间
time
datetime.datetime
日期和时间
datetime
uuid.UUID
UUID/GUID
uniqueidentifier

*文档有一些关于空值如何转换、用于字符串的编码以及二进制类型的大小的额外注释。

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.