标签: pyodbc

使用驱动程序 {SQL SERVER} 与 Native Client 有什么区别

这个问题更多的是关于“为什么”。当您指定DRIVER={SQL Server Native Client 11.0}在连接字符串中指定时,varchar(max)列将返回空白。这个问题似乎已经持续了多年,并且存在一些解决方法。

https://connect.microsoft.com/SQLServer/feedback/details/419996/sql-native-client-returning-blank-fields-to-excel

https://connect.microsoft.com/SQLServer/feedback/details/467300/problem-with-varchar-max-via-sql-native-client

虽然这些问题仍然存在似乎很疯狂,但有效的解决方法是由以下人员建议的:

/sf/answers/2371873101/

是更改连接字符串以使用:

DRIVER={SQL Server}...(rest of connection string)
Run Code Online (Sandbox Code Playgroud)

代替:

DRIVER={SQL Server Native Client 11.0} ...(rest of connection string)
Run Code Online (Sandbox Code Playgroud)

我已经尝试过了,它有效,但我的问题更多是关于“为什么”。如果DRIVER={SQL SERVER}是较旧的驱动程序,当我传递 MultiSubnetFailover=Yes/True 等新功能时,它如何能够连接?

我注意到我已经安装了(Windows,从 odbcad32.exe > 驱动程序)“ODBC Driver 11 for SQL Server”(MSODBCSQL11.DLL,日期为 2014 年)和“SQL Server”(SQLSRV32.DLL,日期为 2010 年)。

在 Windows 上的 VBA 或 Python 中,传递是否会{SQL Server}选择上述两者中较新的一个?使用{SQL Server}over会丢失任何功能吗{SQL Server Native Client 11.0}?如果是,它们会是什么?有更好的解决方法吗?

sql-server odbc vba pyodbc

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

Python sql中JSON字符串的不正确更新

我正在进行反向地理编码并更新生成的 O/P(JSON 格式)并使用 json O/P 更新 sql 表列,但它无法按预期正确存储或更新它。

这是进行反向地理编码后更新的内容

>pw

{'results': [{'address_components': [{'long_name': 'Nandanvan A Wing', 'short_name': 'Nandanvan A Wing', 'types': ['establishment', 'point_of_interest', 'premise']}, {'long_name': 'Shivaji Nagar Marg', 'short_name': 'Shivaji Nagar Marg', 'types': ['route']}, {'long_name': 'Vishnu Prasad Society', 'short_name': 'Vishnu Prasad Society', 'types': ['neighborhood', 'political']}, {'long_name': 'Navpada', 'short_name': 'Navpada', 'types': ['political', 'sublocality', 'sublocality_level_3']}, {'long_name': 'Parle Colony', 'short_name': 'Parle Colony', 'types': ['political', 'sublocality', 'sublocality_level_2']}, {'long_name': 'Vile ....72.8454698}}}, 'place_id': 'ChIJ1SbMGMrJ5zsRQd3_uFHHDN4', 'types': ['political', 'sublocality', 'sublocality_level_3']}], 'status': 'OK'}

但这就是事实,

这是我使用的代码

import pyodbc …
Run Code Online (Sandbox Code Playgroud)

python json pyodbc reverse-geocoding python-requests

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

如何从select语句中批量调用数据并追加到dataframe中?

我有一个包含 sql 语句的文件,我正在使用pyodbc. sql 语句只是一个 select 语句,如下所示:

select distinct (columns) from table1
Run Code Online (Sandbox Code Playgroud)

然而我调用的数据是 3000 万行。

我可以对较小的表执行此操作,并将信息放入数据框中。

无论如何,是否可以批处理 select 语句以仅提取 X 行并附加到数据帧中,并继续执行此操作,直到 3000 万条记录结束?

到目前为止的代码:

import os.path
import pandas as pd
import tinys3
import psycopg2
import pyodbc
from datetime import datetime
import uuid
import glob
from os import listdir
from os.path import isfile, join
import time

startTime = datetime.now()

#reading in data for db
server = 'xxxx' 
database = 'xxx' 
username = 'xxx' 
password = 'xxxx' 
driver= '{ODBC Driver …
Run Code Online (Sandbox Code Playgroud)

python pyodbc python-3.x pandas

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

pyodbc 到 sqlalchemy 连接

我正在尝试将 pyodbc 连接切换到 sqlalchemy。工作的 pyodbc 连接是:

import pyodbc
con = 'DRIVER={ODBC Driver 11 for SQL Server};SERVER=server.com\pro;DATABASE=DBase;Trusted_Connection=yes'
cnxn = pyodbc.connect(con)
cursor = cnxn.cursor()
query = "Select * from table"
cursor.execute(query)
Run Code Online (Sandbox Code Playgroud)

我试过:

from sqlalchemy import create_engine
dns = 'mssql+pyodbc://server.com\pro/DBase?driver=SQL+Server'
engine = create_engine(dns)
engine.execute('Select * from table').fetchall()
Run Code Online (Sandbox Code Playgroud)

基于: http: //docs.sqlalchemy.org/en/latest/core/engines.html

并且:使用 SQLAlchemy 时 pandas.read_sql() 比 pyodbc 慢得多

(尝试使用 Trusted_Connection = Yes 建立连接)

但我收到消息:

操作错误:(pyodbc.OperationalError) ('08001','[08001] [Microsoft][ODBC SQL Server 驱动程序][DBNETLIB]不存在 SQL Server 服务,无法访问。 (17) (SQLDriverConnect); [08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()).(53)') (此错误的背景位于: http: …

python sqlalchemy pyodbc pandas pandas-to-sql

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

使用 pyodbc 将 pickle 对象插入数据库

我尝试了以下方法,但没有成功:

keypoints_database = pickle.load( open( "5958.p", "rb" ) )

sql = 'INSERT INTO tb_fpdata (Std_SymbolNo , FP_Descriptors) VALUES (5958 , ?)' , pyodbc.Binary(keypoints_database)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

错误信息

如何将对象保存到数据库中?

python blob pickle pyodbc

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

为连接字符串属性指定的值无效

import pyodbc as po    

connection_string = """
driver=ODBC Driver 17 for SQL Server;
server=SHADOW-LN4F5NUO;
database=FBI_Crime_Data;
trusted_connection=True;
"""

connection = po.connect(connection_string)
Run Code Online (Sandbox Code Playgroud)

输出:

Traceback (most recent call last):
  File "C:\Program Files\JetBrains\PyCharm 2019.3.1\plugins\python\helpers\pydev\pydevd.py", line 1434, in _exec
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "C:\Program Files\JetBrains\PyCharm 2019.3.1\plugins\python\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "C:\Users\Jack\Desktop\GitHub\FBI_Crime_Data_Analysis\main.py", line 133, in <module>
    import_file(file_location="data/ASR122016.TXT")
  File "C:\Users\Jack\Desktop\GitHub\FBI_Crime_Data_Analysis\main.py", line 122, in import_file
    export_dataframe_to_SQL_Server(df=df, table_name=table_name)
  File "C:\Users\Jack\Desktop\GitHub\FBI_Crime_Data_Analysis\main.py", line 40, in export_dataframe_to_SQL_Server
    connection = po.connect(connection_string)
pyodbc.OperationalError: ('08001', …
Run Code Online (Sandbox Code Playgroud)

python sql-server pyodbc pycharm

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

SQLAlchemy 中 mssql+pyodbc 出现“数据源名称太长”错误

我正在尝试使用 SQLAlchemy 和 pyobdc 将数据帧上传到 Azure SQL Server 数据库上的数据库。我已建立连接,但上传时出现错误:

(pyodbc.Error) ('IM010', '[IM010] [Microsoft][ODBC 驱动程序管理器] 数据源名称太长 (0) (SQLDriverConnect)')

我不确定这个错误是从哪里来的,因为我之前使用过 sqlalchemy 没有问题。我在下面附上了我的代码,有人可以帮我诊断问题吗?

username = 'bcadmin'
password = 'N@ncyR2D2'
endpoint = 'bio-powerbi-bigdata.database.windows.net'

engine = sqlalchemy.create_engine(f'mssql+pyodbc://{username}:{password}@{endpoint}')

df.to_sql("result_management_report",engine,if_exists='append',index=False)
Run Code Online (Sandbox Code Playgroud)

我知道其他 ETL 方法,如数据工厂和 SSMS,但我更喜欢使用 pandas 作为 ETL 过程。

请帮我解决这个错误。

etl sqlalchemy pyodbc pandas azure-sql-database

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

谷歌 Colab 上的 pyodbc

我正在尝试使用 pyodbc 连接到 google colab 上的 SQL 服务器。但是,它告诉我找不到驱动程序。

安装软件包的代码(我用x替换了IP、端口和密码)

``` !sudo apt-get install unixodbc-dev
!pip install pyodbc
!pip install chart_studio ```

``` import pyodbc
conn = pyodbc.connect(DRIVER = '{ODBC Driver 17 for SQL Server}',
                      SERVER = 'xxx.xxx.x.xx, xxxx',
                      DATABASE = 'Database',
                      UID = 'sa',
                      PWD = 'xxxxxx')

cursor = conn.cursor()
```
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

```---------------------------------------------------------------------------
Error                                     Traceback (most recent call last)
<ipython-input-12-3e54dc10e278> in <module>()
      3                       DATABASE = 'Database_PIL',
      4                       UID = 'sa',
----> 5                       PWD = 'mbdxwko2')
      6 
      7 cursor = conn.cursor() …
Run Code Online (Sandbox Code Playgroud)

python sql-server pyodbc google-colaboratory

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

如何检查 pyodbc 游标是否为空?

使用 pyodbc 通过 SELECT 查询 MySQL 数据库。我需要确定查询是否返回任何内容,我发现人们使用的方式是行计数,但是经过一些测试后,这总是为我返回 -1 。我在 github wiki 上找到了这个游标,我认为它描述了我的问题。

rowcount 最后一个 SQL 语句修改的行数。

如果没有执行 SQL 或者行数未知,则该值为 -1。请注意,出于性能原因,数据库在 SQL select 语句之后立即报告 -1 的情况并不罕见。(在第一批记录返回到应用程序之前,可能无法知道确切的数量。)

我想知道是否有办法解决这个问题,或者是否有其他方法可以做到这一点,谢谢。

python pyodbc

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

使用 SQL Server 提高 pandas 的 to_sql() 性能

我来找你是因为我无法解决pandas.DataFrame.to_sql()方法的问题。

我已经在我的脚本和数据库之间建立了连接,我可以发送查询,但实际上它对我来说太慢了。

我想找到一种方法来提高我的脚本的性能。也许有人会找到解决方案?

这是我的代码:

  engine = sqlalchemy.create_engine(con['sql']['connexion_string'])
  conn = engine.connect()
  metadata = sqlalchemy.Metadata()
  try : 
    if(con['sql']['strategy'] == 'NEW'): 
      query = sqlalchemy.Table(con['sql']['table'],metadata).delete()
      conn.execute(query)
      Sql_to_deploy.to_sql(con['sql']['table'],engine,if_exists='append',index = False,chunksize = 1000,method = 'multi')
    elif(con['sql']['strategy'] == 'APPEND'):
      Sql_to_deploy.to_sql(con['sql']['table'],engine,if_exists='append',index = False,chunksize = 1000,method = 'multi')
    else:
      pass
  except Exception as e:
    print(type(e))
Run Code Online (Sandbox Code Playgroud)

当我退出 chunksize 和方法参数时,它正在工作,而且太慢了,这一刻它太慢了(30000 行几乎需要 3 分钟)。当我输入这些参数时,我得到一个sqlalchemy.exc.ProgrammingError...

感谢您的帮助 !

python sql-server sqlalchemy pyodbc pandas

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