标签: pyodbc

跟进:从python执行.sql文件

一年多以前,有人问过这个问题:执行.sql文件,用于在python中的SQL Management Studio中运行.

我正在python中编写一个连接到SQL服务器的脚本,并根据大(几GB).sql文件中的SQL命令创建和填充数据库.

看起来SQLCMD需要下载并安装SQL Server Express.有没有其他方法从python执行.sql文件,而不需要使用我的脚本的每个人下载和安装SQL Server?pyodbc有这种能力吗?

编辑:

这是另一个类似的问题: 使用python MySQLdb执行*.sql文件

在这里,解决方案是从命令(在本例中为mysql.exe)调用实用程序,并将该文件作为参数列出.

在我看来应该有一种方法来使用Python的DB API库之一,但我还没有找到它所以我正在寻找像我可以用来运行文件的SQLCMD或MYSQL这样的*.exe从命令行.

PS如果我没有正确地看这个,请随时纠正我.也许下面的代码与从命令行运行一样有效:

for line in open('query.sql','r'):
    cursor.execute(line)
Run Code Online (Sandbox Code Playgroud)

python sql sql-server pyodbc python-db-api

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

检查pyodbc连接是打开还是关闭

我经常收到这个错误: ProgrammingError: The cursor's connection has been closed.

在尝试执行查询之前,有没有办法检查我正在使用的连接是否已关闭?

我正在考虑编写一个包装器来执行查询.首先,它将检查连接是否关闭,如果是,它将重新连接.这是一种可行的方法吗?

python mysql odbc pyodbc

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

无法通过pyodbc从postgresql数据库中的一个表中选择 - 如何调试

我有一个postgresql数据库,其中包含drupal制作的一些表格,以及我自己制作的其他表格.然后我有一个使用pyodbc的python api来查询数据库.

只有一个表,我无法通过pyodbc选择.如果我打印查询并将其粘贴到pgadminIII中,那么它会给出预期的结果,如果我在python代码中更改了表,它会给出正确的结果.

查询是

select id from a_company where name = 'somename'
Run Code Online (Sandbox Code Playgroud)

结果

7
8
9
Run Code Online (Sandbox Code Playgroud)

等(50行int id)

我的python代码是

sql = """select id from a_company where name = 'somename'"""
curs = self._connection.cursor()
sql = self._ConvertToPostGres(sql) #drops [] etc, as the initial code was for MSSQL
curs.execute(sql)
f = curs.fetchall()
Run Code Online (Sandbox Code Playgroud)

通过pyodbc的调用返回

None
Run Code Online (Sandbox Code Playgroud)

(我可以使用相同的连接从其他表中进行选择,因此连接字符串无关紧要?)

我最好的猜测是这是一个权限问题,而且我已经用这个特定的表做了一些蠢事.

任何人都可以建议如何调试这个?

通过pgadmin创建表:

-- Table: a_company

-- DROP TABLE a_company;

CREATE TABLE a_company
(
  id integer NOT NULL DEFAULT nextval('a_company_id_seq'::regclass),
  name character varying,
  abn character varying,
  url character …
Run Code Online (Sandbox Code Playgroud)

python postgresql pyodbc

7
推荐指数
1
解决办法
591
查看次数

如何使用Python pypyodbc获取整个VARCHAR(MAX)列

我有一个Python程序,使用ODBC连接连接到MSSQL数据库.我正在使用的Python库是pypyodbc.

这是我的设置:

  • Windows 8.1 x64
  • SQL Server 2014 x64
  • Python 2.7.9150
  • PyPyODBC 1.3.3
  • ODBC驱动程序:SQL Server Native Client 11.0

我遇到的问题是,当我查询带有varchar(max)列的表时,内容被截断.

我是pypyodbc的新手,我一直在疯狂地搜索,并且找不到任何关于如何防止在pypyodbc甚至pyodbc中发生这种情况的事情.至少没有我一直在使用的搜索词,我不知道还有什么其他的短语可以尝试.

我甚至尝试添加SET TEXTSIZE 2147483647;到我的SQL查询,但数据仍然被截断.

我该如何防止这种情况发生?或者,你能指出我正确的方向吗?

更新:

所以,我尝试在我的SQL查询中执行强制转换.当我这样做CAST(my_column as VARCHAR(MAX))时截断在相同的位置.但是,如果我这样做CAST(my_column as VARCHAR(8000))会给我一个更大的文本集,但它仍然会截断一些内容.如果我尝试做任何比8000我更大的错误,说8000我是最大的,我可以使用.有人知道这里会发生什么吗?使用MAX不起作用似乎很奇怪.

python sql-server pyodbc pypyodbc

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

从 pd.read_sql 输出附加到 Pandas 数据帧

我来自 R,但由于各种原因需要在 Python 中执行此操作。这很可能是我的 Python 的基本 PEBKAC 问题,而不是 Pandas、PyODBC 或其他任何东西。

请多多包涵。

我当前的 Python 3 代码:

import pandas as pd
import pyodbc 
cnxn = pyodbc.connect(DSN="databasename", uid = "username", pwd = "password")

querystring = 'select order_number, creation_date from table_name where order_number = ?'

orders = ['1234',
'2345',
'3456',
'5678']

for i in orders:
   print(pd.read_sql(querystring, cnxn, params = [i]))
Run Code Online (Sandbox Code Playgroud)

我需要的是一个列名为“order_number”和“creation_date”的数据框。

代码输出的是: 在此处输入图片说明

抱歉截屏,无法在此处获取格式。

阅读dataframe.append page 后,我尝试了这个:

df = pd.DataFrame()

for i in orders:
       df.append(pd.read_sql(querystring, cnxn, params = [i]))
Run Code Online (Sandbox Code Playgroud)

这似乎运行良好(无论如何都没有抛出错误)。

但是当我尝试输出 df 时,我得到 …

python pyodbc dataframe pandas

7
推荐指数
1
解决办法
4253
查看次数

"没有指定驱动程序名称"将pandas数据帧写入SQL Server表

我正在尝试将Pandas的DataFrame写入SQL Server表.这是我的例子:

import pyodbc
import pandas as pd
import sqlalchemy

df = pd.DataFrame({'MDN': [242342342] })
engine = sqlalchemy.create_engine('mssql://localhost/Sandbox?trusted_connection=yes')
df.to_sql('Test',engine, if_exists = 'append',index = False)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息.有关如何修复的任何想法?

c:\python34\lib\site-packages\sqlalchemy\connectors\pyodbc.py:82: SAWarning: No driver name specified; this is expected by PyODBC when using DSN-less connections
  "No driver name specified; "


---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-25-78677a18ce2d> in <module>()
      4 engine = sqlalchemy.create_engine('mssql://localhost/Sandbox?trusted_connection=yes')
      5 
----> 6 df.to_sql('Test',engine, if_exists = 'append',index = False)
      7 
      8 #cnxn.close()

c:\python34\lib\site-packages\pandas\core\generic.py in to_sql(self, name, con, flavor, schema, if_exists, index, …
Run Code Online (Sandbox Code Playgroud)

python sql-server sqlalchemy pyodbc pandas

7
推荐指数
1
解决办法
8206
查看次数

使用executemany()插入行时"无效的参数类型"(numpy.int64)

我尝试将一堆数据插入数据库

insert_list = [(1,1,1,1,1,1),(2,2,2,2,2,2),(3,3,3,3,3,3),....] #up to 10000 tuples in this list

conn = pyodbc.connect('DRIVER={FreeTDS};SERVER=xxxxx;DATABASE=xxxx;UID=xx;PWD=xx;TDS_Version=7.0')
cursor = conn.cursor()

sql = "insert into ScanEMAxEMAHistoryDay(SecurityNumber, EMA1, EMA2, CrossType, DayCross, IsLocalMinMax) values (?, ?, ?, ?, ?, ?)"

cursor.executemany(sql, insert_list)
Run Code Online (Sandbox Code Playgroud)

cursor.executemany(sql,insert_list)

pyodbc.ProgrammingError:('参数类型无效.param-index = 4 param-type = numpy.int64','HY105')

减少到100元组:

cursor.executemany(sql, insert_list[:100])
Run Code Online (Sandbox Code Playgroud)

cursor.executemany(sql,insert_list [:100])

pyodbc.ProgrammingError:('参数类型无效.param-index = 4 param-type = numpy.int64','HY105')cursor.executemany(sql,insert_list [:100])

减少到5元组:

cursor.executemany(sql, insert_list[:5])
conn.commit()
Run Code Online (Sandbox Code Playgroud)

这可以插入数据库

我试着:

sql = 'SET GLOBAL max_allowed_packet=50*1024*1024'
cursor.execute(sql)
Run Code Online (Sandbox Code Playgroud)

在excutemany()之前,它有一个错误:

pyodbc.ProgrammingError:('42000',"[42000] [FreeTDS] [SQL Server]'GLOBAL'不是公认的SET选项.(195)(SQLExecDirectW)")

我是怎么解决这个问题的

谢谢.

python sql-server numpy pyodbc freetds

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

pyodbc sql包含0个参数标记,但提供了1个参数''hy000'

我使用的是Python 3.6,pyodbc,并连接到SQL Server.

我正在尝试连接到数据库,然后创建带参数的查询.

这是代码:

import sys
import pyodbc

# connection parameters
nHost = 'host'
nBase = 'base'
nUser = 'user'
nPasw = 'pass'

# make connection start
def sqlconnect(nHost,nBase,nUser,nPasw):
    try:
        return pyodbc.connect('DRIVER={SQL Server};SERVER='+nHost+';DATABASE='+nBase+';UID='+nUser+';PWD='+nPasw)
        print("connection successfull")
    except:
        print ("connection failed check authorization parameters")  
con = sqlconnect(nHost,nBase,nUser,nPasw)
cursor = con.cursor()
# make connection stop

# if run WITHOUT parameters THEN everything is OK   
ask = input ('Go WITHOUT parameters y/n ?')
if ask == 'y':
    # SQL without parameters start
    res …
Run Code Online (Sandbox Code Playgroud)

python sql markers pyodbc

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

如何使用pyodbc从SQL查询返回列表?

我试图运行一个选择查询来使用pyodbcpython 2.7 从SQL Server检索数据.我希望数据在列表中返回.我写的代码如下.

它有点工作,但不符合我的预期.我的返回列表如下所示:

Index     Type     Size        Value
0         Row      1           Row object of pyodbc module
1         Row      1           Row object of pyodbc module
...
105       Row      1           Row object of pyodbc module
Run Code Online (Sandbox Code Playgroud)

我希望看到类似下面的内容(即我在SQL中的表)

ActionId   AnnDate      Name    SaleValue
128929     2018-01-01   Bob     105.3
193329     2018-04-05   Bob     1006.98
...
23654      2018-11-21   Bob     103.32
Run Code Online (Sandbox Code Playgroud)

列表不是使用SQL查询返回数据的最佳方法pyodbc吗?

import pyodbc


def GetSQLData(dbName, query):

    sPass = 'MyPassword'
    sServer = 'MyServer\\SQL1'
    uname = 'MyUser'

    cnxn = pyodbc.connect("Driver={SQL Server Native Client 11.0};"
                    "Server=" …
Run Code Online (Sandbox Code Playgroud)

python list pyodbc python-2.7

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

Linux Python Azure功能APP - 尽管在requirements.txt和其他模块工作正常,但找不到pyodbc模块

我正在使用一个Linux consumption计划.

我收到以下错误; Exception: ModuleNotFoundError: No module named 'pyodbc'

我已经pyodbcrequirements.txt文件中添加了这个文件中的其他模块,比如azure-storage工作正常.

有没有人看过这个问题或者可以证实这是一个已知的bug?我看不到任何手动安装它的方法.

python pyodbc azure-functions

7
推荐指数
1
解决办法
595
查看次数