如何序列pyodbc光标输出(从.fetchone,.fetchmany或.fetchall)Python字典?
我正在使用bottlepy并需要返回dict,因此它可以将其作为JSON返回.
我正在尝试使用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) 我试图找到一种方法来创建一个程序,使我能够根据几个不同的因素找到最佳的数据组合.
我有一个包含生物数据的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 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) 我正在尝试从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程序,使用ODBC连接连接到MSSQL数据库.我正在使用的Python库是pypyodbc.
这是我的设置:
我遇到的问题是,当我查询带有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不起作用似乎很奇怪.
我正在尝试为 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) 我可以通过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) 我在Linux Mint 18上运行Python 3.5.我想加载pypyodbc模块.但是,无论我尝试什么,我总是得到错误:
Run Code Online (Sandbox Code Playgroud)OdbcNoLibrary: 'ODBC Library is not found. Is LD_LIBRARY_PATH set?'
在使用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) pypyodbc ×10
python ×9
pyodbc ×6
sql-server ×4
ms-access ×2
odbc ×2
cursor ×1
database ×1
dictionary ×1
etl ×1
freetds ×1
import ×1
linux ×1
macos ×1
python-2.7 ×1
sql ×1
sqlalchemy ×1
unicode ×1