标签: pypyodbc

输出pyodbc游标结果为python字典

如何序列pyodbc光标输出(从.fetchone,.fetchmany.fetchall)Python字典?

我正在使用bottlepy并需要返回dict,因此它可以将其作为JSON返回.

python dictionary cursor pyodbc pypyodbc

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

Pypyodbc:尝试连接SQL Server时无法打开lib'FreeTDS':找不到文件")错误

我正在尝试使用Mac上的Pypyodbc连接到SQL Server,我收到以下错误:

pypyodbc.DatabaseError: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib 'FreeTDS' : file not found")
Run Code Online (Sandbox Code Playgroud)

我已经安装了freeTDS和unixodbc

brew install unixodbc
brew install freetds
Run Code Online (Sandbox Code Playgroud)

这是我的连接字符串与虚拟数据:

connection_String = "Driver=FreeTDS;Server=123.12.12.12;tds_version=7.2;Database=db_db;Uid=username:pwd=password:port=1433"
Run Code Online (Sandbox Code Playgroud)

python sql-server macos freetds pypyodbc

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

如何将.accdb文件导入Python并使用数据?

我试图找到一种方法来创建一个程序,使我能够根据几个不同的因素找到最佳的数据组合.

我有一个包含生物数据的Microsoft Access文件.攻击,防御,健康,需要使用的战斗技能和其他几个信息.

我正在尝试导入此.accdb(Access 2013)文件,并能够访问存储的数据.

我要尽量让该扫描所有数据的程序并运行所有可能的组合(套5个生物)找到的生物为不同需要的战斗能力最强的组合(例如:100战斗技能将使用生物1,2, 3,4和5,其中125战斗技能将使用生物3,5,6,8和10)

我首先需要帮助的主要是能够导入数据库以便于访问,因此我不必在python中重新创建数据,因此我可以在将来使用相同的程序用于新的访问数据库.

我已经安装了https://code.google.com/p/pypyodbc/,但似乎无法弄清楚如何让它加载现有文件.

编辑

我尝试使用Gord的答案代码,修改后的代码以适应我的信息.

# -*- coding: utf-8 -*-
import pypyodbc
pypyodbc.lowercase = False
conn = pypyodbc.connect(
    r"Driver={Microsoft Access Driver (*.mdb, *.accdb)};" +
    r"Dbq=C:\Users\Ju\Desktop\Dark Summoner.accdb;")
cur = conn.cursor()
cur.execute("SELECT Number, Name, Atk, Def, HP, BP, Species, Special FROM Impulse AA+");
while True:
    row = cur.fetchone()
    if row is None:
        break
    print (u"Creature with Number {1} is {1} ({2})".format(
        row.get("CreatureID"), row.get("Name_EN"), row.get("Name_JP")))
cur.close()
conn.close()
Run Code Online (Sandbox Code Playgroud)

打印线出错,所以在它周围添加了().

我现在收到这个错误,类似于我过去的错误.

Traceback (most recent call last):
  File …
Run Code Online (Sandbox Code Playgroud)

python database ms-access ms-access-2013 pypyodbc

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

pyodbc比pypyodbc有任何设计优势吗?

我知道pyodbc是一个较旧的项目,可能更具特色和强大,但它的设计是什么(基于编译的C代码的组件),这会使它优于纯Python实现,如pypyodbc

我做了很多ETL工作,并且正在考虑从Linux/Jython/JDBC方法切换到Windows/Cygwin/Python/ODBC方法.

python odbc etl pyodbc pypyodbc

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

使用pypyodbc连接到SQL Server

我需要使用Python 2.7将unicode发送到SQL Server.我用pymssql失败了.我现在正努力pypyodbc工作(而不是pyodbc),因为它提供了工作的unicode示例.问题是示例中的连接字符串看起来不像我认识的任何东西.我看了这个,经过一些试验和错误,构造了这个字符串:

conn = pypyodbc.connect("DRIVER={SQL Server};SERVER='MyServer';UID='me';PWD='MyPassword';DATABASE='db'")
Run Code Online (Sandbox Code Playgroud)

重新DatabaseError关注连接字符串:

C:\Anaconda\lib\site-packages\pypyodbc.pyc in __init__(self, connectString, autocommit, ansi, timeout, unicode_results, readonly, **kargs)
---> 2 conn = pypyodbc.connect("DRIVER={SQL Server};SERVER='MyServer';UID='me';PWD='password';DATABASE='db'")

C:\Anaconda\lib\site-packages\pypyodbc.pyc in __init__(self, connectString, autocommit, ansi, timeout, unicode_results, readonly, **kargs)
---> 2273         self.connect(connectString, autocommit, ansi, timeout, unicode_results, readonly)

C:\Anaconda\lib\site-packages\pypyodbc.pyc in connect(self, connectString, autocommit, ansi, timeout, unicode_results, readonly)
---> 2321         check_success(self, ret)

C:\Anaconda\lib\site-packages\pypyodbc.pyc in ctrl_err(ht, h, val_ret, ansi)
---> 919                 raise DatabaseError(state,err_text)

DatabaseError: (u'08001', u'[08001] …
Run Code Online (Sandbox Code Playgroud)

sql-server pyodbc python-2.7 pypyodbc

9
推荐指数
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
查看次数

如何使用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
查看次数

pypyodbc错误'关联语句未准备'

我正在尝试为 pypyodbc SQL Server 创建一个“upsert”函数。我已经验证建立的查询将在 SSMS 中运行并获得所需的结果,但是当尝试使用 pypyodbc 执行和提交时,我收到以下错误:'HY007','[HY007] [Microsoft][ODBC SQL Server Driver]Associated声明未准备好”

这是 upsert 函数:

def sql_upsert(sql_connection, table, key_field, key_value, **kwargs):
    keys = ["{key}".format(key=k) for k in kwargs]
    values = ["'{value}'".format(value=v) for v in kwargs.values()]
    update_columns = ["{key} = '{value}'".format(key=k, value=v) for k, v in kwargs.items()]
    sql = list()

    #update
    sql.append("UPDATE {table} SET ".format(table=table))
    sql.append(", ".join(update_columns))
    sql.append(" WHERE {} = '{}'".format(key_field, key_value))
    sql.append(" IF @@ROWCOUNT=0 BEGIN ")

    # insert
    sql.append("INSERT INTO {table} (".format(table=table))
    sql.append(", ".join(keys))
    sql.append(") VALUES …
Run Code Online (Sandbox Code Playgroud)

python sql pypyodbc

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

使用pyodbc和MSSQL的nvarchar字段的UnicodeDecodeError的原因是什么?

我可以通过pypyodbc在python中发送查询来从MSSQL数据库中读取.

大多数unicode字符处理正确,但我遇到了一个导致错误的特定字符.

有问题的字段是类型,nvarchar(50)并以这个字符""开头,这对我来说有点像这样......

-----
|100|
|111| 
-----
Run Code Online (Sandbox Code Playgroud)

如果该数字是十六进制,0x100111那么它就是角色supplementary private use area-b u+100111.虽然有趣的是,如果它是二进制的,0b100111那么它是一个撇号,可能是在上传数据时使用了错误的编码吗?该字段存储中文邮政地址的一部分.

错误消息包括

UnicodeDecodeError:'utf16'编解码器无法解码位置0-1中的字节:意外的数据结束

在这里它是完整的......

Traceback (most recent call last):   File "question.py", line 19, in <module>
    results.fetchone()   File "/VIRTUAL_ENVIRONMENT_DIR/local/lib/python2.7/site-packages/pypyodbc.py", line 1869, in fetchone
    value_list.append(buf_cvt_func(from_buffer_u(alloc_buffer)))   File "/VIRTUAL_ENVIRONMENT_DIR/local/lib/python2.7/site-packages/pypyodbc.py", line 482, in UCS_dec
    uchar = buffer.raw[i:i + ucs_length].decode(odbc_decoding)   File "/VIRTUAL_ENVIRONMENT_DIR/lib/python2.7/encodings/utf_16.py", line 16, in decode
    return codecs.utf_16_decode(input, errors, True) UnicodeDecodeError: 'utf16' codec can't decode bytes in position 0-1: unexpected end of data
Run Code Online (Sandbox Code Playgroud)

这是一些最小的再现代码......

import pypyodbc

connection_string …
Run Code Online (Sandbox Code Playgroud)

python sql-server unicode pyodbc pypyodbc

5
推荐指数
1
解决办法
1786
查看次数

尝试导入pypyodbc模块会出现错误'找不到ODBC库.是否设置了LD_LIBRARY_PATH?'

我在Linux Mint 18上运行Python 3.5.我想加载pypyodbc模块.但是,无论我尝试什么,我总是得到错误:

OdbcNoLibrary: 'ODBC Library is not found. Is LD_LIBRARY_PATH set?'
Run Code Online (Sandbox Code Playgroud)

使用python导入之前设置LD_LIBRARY_PATH我得到了设置路径的建议os.getcwd(),但它也没有工作,并给了我同样的错误.

我应该安装什么才能使它工作?

查看错误的完整日志:

In [1]: import pypyodbc
---------------------------------------------------------------------------
OSError                                   Traceback (most recent call last)
/home/me/env/lib/python3.5/site-packages/pypyodbc.py in <module>()
    426         # First try direct loading libodbc.so
--> 427         ODBC_API = ctypes.cdll.LoadLibrary('libodbc.so')
    428     except:

/usr/lib/python3.5/ctypes/__init__.py in LoadLibrary(self, name)
    424     def LoadLibrary(self, name):
--> 425         return self._dlltype(name)
    426 

/usr/lib/python3.5/ctypes/__init__.py in __init__(self, name, mode, handle, use_errno, use_last_error)
    346         if handle is None:
--> 347             self._handle = …
Run Code Online (Sandbox Code Playgroud)

python linux import odbc pypyodbc

5
推荐指数
1
解决办法
4284
查看次数