标签: pyodbc

调用存储过程python

我正在编写一个脚本来提取/更新MsSQL服务器,我可以让我的一个存储过程调用工作但不是我在updateDB函数中的第二个.这是我的代码脚本运行正常没有错误代码

import pyodbc 
import json
import argparse
import cgi, cgitb


#GLOBALS
    BUILDCODE = " "
    deptCODE = 0
    bldgCODE = " "
def getCodes(conn, building, department):
    #just for testing
    departmentt = 'COMPUTER SCIENCE'
    buildingt = 'PEARCE HALL'


    #geting the building code from db
    cursorBuild = conn.cursor()
    cursorBuild.execute("select * from dbo.building where name = '%s'" % buildingt)
    bldgRow = cursorBuild.fetchall() 
    cursorBuild.close()
    bldgCode = bldgRow.pop(0)

    global bldgCODE
    bldgCODE = bldgCode.code


    #getting the dept code
    cursorDept = conn.cursor()
    cursorDept.execute("execute dbo.GetCode_ByDepartment @department = '%s'" …
Run Code Online (Sandbox Code Playgroud)

python sql-server stored-procedures pyodbc

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

对SQL Server的调用忽略pyodbc.connect timeout参数

我在Linux上使用pyodbc和FreeTDS连接到SQL Server 2005.我注意到我的连接的超时参数没有被我的查询所尊重.

当我运行以下操作时,我希望在cursor.execute调用之后看到超时错误.

import pyodbc
import time

connString = 'SERVER=dbserver;PORT=1433;DATABASE=db;UID=dbuser;PWD=dbpwd;' + \
    'DRIVER=FreeTDS'
cnxn = pyodbc.connect(connString , timeout=3)

cursor = cnxn.cursor()

t1  = time.time()
cursor.execute("SELECT MAX(Qty) FROM big_table WHERE ID<10000005")
print cursor.fetchone()
t2 = time.time()
print t2-t1

cursor.execute("WAITFOR DELAY '00:00:30'")
print 'OK'
Run Code Online (Sandbox Code Playgroud)

相反,我得到了这个输出.指示第一个db查询占用7.5秒,第二个调用占用30秒而不会超时.

(808432.0, )
7.56196093559
OK
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来强制使用pyodbc和SQL Server查询超时?

python sql-server-2005 pyodbc

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

在Ubuntu上通过pyODBC连接到Microsoft SQL Server

我有连接到Microsoft SQL Server实例从一个问题pyODBC的内Ubuntu (12.10)机.

我得到的错误是:

pyodbc.Error: ('IM002', '[IM002] [unixODBC][Driver Manager]Data Source name not found, and no default driver specified (0) (SQLDriverConnect)')
Run Code Online (Sandbox Code Playgroud)

用于pyodbc的连接字符串是:

self.corpus_cnxn = pyodbc.connect('DRIVER={FreeTDS};SERVER=UKEDN-06880;DATABASE=db1;UID=user;PWD=pass')
Run Code Online (Sandbox Code Playgroud)

这似乎可以在Windows中的pyODBC中正常工作(只需要将DRIVER更改为'SQL Server'而不是'FreeTDS'),当我尝试使用终端上的tsql 工具从Ubuntu机器连接时,它工作正常,以下命令:

tsql -S UKEDN-06880 -p 1433 -U user -P pass
Run Code Online (Sandbox Code Playgroud)

我可以选择任何没有问题的表,它似乎没有在pyODBC内工作.

任何帮助或建议将不胜感激,我的Linux技能非常弱,我完全陷入困境,虽然它从tsql工作,我感觉非常接近!

python linux sql-server ubuntu pyodbc

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

使用pyodbc将日期时间插入MS SQL表

我正在尝试使用pyodbc将日期时间值插入到MS SQL Server表中.如果我手动执行,例如:

cursor.execute("""insert into currentvalue(value1,currentdatetime)
                                    values(55,'2014-06-27 16:42:48.533')""")
Run Code Online (Sandbox Code Playgroud)

我没有任何问题,但是当我尝试做的时候:

currenttime = str(datetime.datetime.now())
cursor.execute("""insert into currentvalue(value1,currentdatetime) 
                                    values(55,"""+ currenttime+")")
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误:

SQL服务器'07'附近的语法不正确,我认为这是日期和开始时间之后的数字.

我也试过这个:

currenttime = "'"+str(datetime.datetime.now())+"'"
Run Code Online (Sandbox Code Playgroud)

现在出现这个错误:

从字符串转换日期和/或时间时转换失败.

python sql-server pyodbc mssql-jdbc

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

"常规错误无法从Access ODBC打开注册表项临时(volatile)..."

我尝试了以下方法:

private String password = "";
private String dbName = "dataHC.accdb";
private String bd = dbName + ";PWD=" + password;
String  url   = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ="+bd+";";

private Connection conn = null;

//Connect
public void connect() {
    try{
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        conn = DriverManager.getConnection(url);
        if (conn != null)
            System.out.println("Conexión a base de datos "+dbName+". listo");
    }catch(SQLException e){
        System.out.println(e);
    }catch(ClassNotFoundException e){
        System.out.println(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

字体:http://www.jc-mouse.net/base-de-datos/consultas-con-parametros-en-access-y-java

我得到了这个错误:

[Microsoft] [ODBC Microsoft Access驱动程序]常规错误无法打开注册表项临时(易失性)Ace DSN进程0x7f8线程0x1174 DBC

特别

java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver]General error …
Run Code Online (Sandbox Code Playgroud)

ms-access odbc pyodbc jdbc-odbc

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

使用SQLAlchemy从Pandas Dataframe创建Python MS Access数据库表

我正在尝试从Python创建一个MS Access数据库,并想知道是否可以直接从pandas数据帧创建一个表.我知道,我可以用熊猫dataframe.to_sql()功能的数据帧成功地写入到SQLite数据库或通过使用SQLAlchemy的发动机为其他数据库格式(但不是不幸访问),但我不能让所有的件件走到一起.这是我一直在测试的代码片段:

import pandas as pd
import sqlalchemy
import pypyodbc     # Used to actually create the .mdb file
import pyodbc

# Connection function to use for sqlalchemy
def Connection():
    MDB = 'C:\\database.mdb'
    DRV = '{Microsoft Access Driver (*.mdb)}'
    connection_string = 'Driver={Microsoft Access Driver (*.mdb)};DBQ=%s' % MDB
    return pyodbc.connect('DRIVER={};DBQ={}'.format(DRV,MDB))


# Try to connect to the database
try:
    Conn = Connection()
# If it fails because its not been created yet, create it and connect to it
except:
    pypyodbc.win_create_mdb(MDB)
    Conn …
Run Code Online (Sandbox Code Playgroud)

python ms-access sqlalchemy pyodbc pypyodbc

8
推荐指数
1
解决办法
9786
查看次数

pyodbc + MySQL + Windows:未找到数据源名称且未指定默认驱动程序

我正在尝试使用pyodbc连接到Windows Server 2008 R2 localhost上的MySQL 5.6.我在localhost上使用了MySQL实例的完整安装,包括ODBC连接器.我把它连接到一个远程SQL Server实例很漂亮,但对于我的生活,我无法让它连接到本地MySQL实例.我使用connectionstrings.com的这个指南作为参考.

这是一些代码:

import pyodbc

def create_mssql_conn():
    return pyodbc.connect(r'Driver={SQL Server};Server=MSSQLSRV;Database=ecomm;Trusted_Connection=yes;')

def create_mysql_conn():
    return pyodbc.connect(r'Provider=MSDASQL;Driver={MySQL ODBC 5.6 UNICODE Driver};Server=127.0.0.1;Database=ecomm;User=root;Password=myP@$$w0rd;Option=3;')

# conn = create_mssql_conn() # This one works
conn = create_mysql_conn() # This one breaks
cursor = conn.cursor()
cursor.execute('SELECT * FROM inventory')

while 1:
    row = cursor.fetchone()
    if not row:
        break
    print row
Run Code Online (Sandbox Code Playgroud)

这是错误:

pyodbc.Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')
Run Code Online (Sandbox Code Playgroud)

我尝试了从添加 …

mysql windows odbc connection-string pyodbc

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

使用先前工作配置的django-pyodbc-azure回滚错误 - 第389行

我一直在Linux上使用django-pyodbc-azure一段时间,还有pydobc,FreeTDS和unixODBC将Django连接到SQL Server 2014.我遇到了这个问题,我的应用程序工作正常,调试有问题它.为了重现这个问题,我开始使用全新的Django应用程序来保持简单.这是我的virtualenv:

(azuretest)[vagrant@vagrant azuretest]$ pip freeze
Django==1.8.6
django-pyodbc-azure==1.8.3.0
pyodbc==3.0.10
Run Code Online (Sandbox Code Playgroud)

这是我连接到SQL Server的数据库配置:

DATABASES = {
    'default': {
        'ENGINE': 'sql_server.pyodbc',
        'HOST': 'myserver.com',
        'PORT': '1433',
        'NAME': 'my_db',
        'USER': 'my_db_user',
        'PASSWORD': 'mypw',
        'AUTOCOMMIT': True,
        'OPTIONS': {
            'driver': 'FreeTDS',
            'autocommit': True,
            'unicode_results': True,
            'host_is_server': True,
            'extra_params': 'tds_version=7.2',
        },
    },
}
Run Code Online (Sandbox Code Playgroud)

我创建了一个简单的models.py:

class TestTemp(models.Model):
    tempdate = models.DateField()
Run Code Online (Sandbox Code Playgroud)

这个设置在一个相当复杂的Django项目中运行良好,该项目仍可以SELECT到同一个数据库.但是,每当我尝试进行UPDATE或迁移时,我都会收到此错误:

(azuretest)[vagrant@vagrant azuretest]$ ./manage.py migrate home
Operations to perform:
  Apply all migrations: home
Running migrations:
  Rendering model states... DONE
  Applying home.0001_initial...Traceback (most recent call last):
  File "/home/vagrant/.virtualenvs/azuretest/lib/python3.4/site-packages/sql_server/pyodbc/base.py", line …
Run Code Online (Sandbox Code Playgroud)

python sql-server django pyodbc django-pyodbc-azure

8
推荐指数
1
解决办法
540
查看次数

to_sql pyodbc count字段不正确或语法错误

我正在从api网站下载Json数据,并使用sqlalchemy,pyodbc和pandas的to_sql函数将该数据插入到MSSQL服务器中.

我可以下载最多10000行,但是我必须将chunksize限制为10,否则我会收到以下错误:

DBAPIError:(pyodbc.Error)('07002','[07002] [Microsoft] [SQL Server Native Client 11.0] COUNT字段不正确或语法错误(0)(SQLExecDirectW)')[SQL:'INSERT INTO [TEMP_producing_entity_details]

有大约5亿行可供下载,它只是以这种速度爬行.有关解决方法的任何建议吗?

谢谢,

python sql-server pyodbc pandas

8
推荐指数
1
解决办法
3208
查看次数

通过sqlalchemy和pyodbc访问MS SQL数据库时出现"登录超时已过期"错误

所以我在使用远程MS SQL Server进行sqlalchemy和pyodbc时遇到了一些麻烦.本地sqlcmd工作正常但不是当我尝试通过python代码读取数据库时.任何帮助,将不胜感激.

环境:

  • Centos 7
  • SQLCmd版本:版本17.1.0000.1 Linux
  • MS SQL Server 6.01.7601.17514
  • Python 2.7

以下sqlcmd正常工作

sqlcmd -S {Host},{Port} -U {USER} -P {PWD} -Q "use {Database};"
Run Code Online (Sandbox Code Playgroud)

试图直接使用sqlalchemy或pyodbc不起作用.错误:

pyodbc.OperationalError:('HYT00',u'[HYT00] [unixODBC] [Microsoft] [SQL Server的ODBC驱动程序17]登录超时过期(0)(SQLDriverConnect)')

代码:尝试使用pyodbc

conn = pyodbc.connect(
    r'DRIVER={ODBC Driver 17 for SQL Server};'
    r'SERVER=HOST,PORT;'
    r'DATABASE=DATABASE;'
    r'UID=UID;'
    r'PWD=PWD'
    )
Run Code Online (Sandbox Code Playgroud)

尝试使用sqlalchemy:

create_engine('mssql+pyodbc://{user}:{password}@{host}:{port}/{database}?driver={driver}'.format(
        user=user,
        password=password,
        host=host,
        database=database,
        port=port,
        driver="ODBC+Driver+17+for+SQL+Server"
    )).connect()
Run Code Online (Sandbox Code Playgroud)

如果我从命令中删除端口,我可以使用sqlcmd重现错误,所以我传递给pyodbc的conn_string可能格式不正确吗?

sql-server sqlalchemy sqlcmd pyodbc

8
推荐指数
2
解决办法
3486
查看次数