问题:
我得到以下回溯,并不明白它的含义或如何解决它:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Python26\lib\multiprocessing\forking.py", line 342, in main
self = load(from_parent)
File "C:\Python26\lib\pickle.py", line 1370, in load
return Unpickler(file).load()
File "C:\Python26\lib\pickle.py", line 858, in load
dispatch[key](self)
File "C:\Python26\lib\pickle.py", line 1083, in load_newobj
obj = cls.__new__(cls, *args)
TypeError: object.__new__(pyodbc.Cursor) is not safe, use pyodbc.Cursor.__new__()
Run Code Online (Sandbox Code Playgroud)
情况:
我有一个SQL Server数据库,里面装满了要处理的数据.我正在尝试使用多处理模块来并行化工作并利用计算机上的多个核心.我的一般类结构如下:
work_queue和一个write_queuework_queue.work_queue并将完成的项目放入write_queue. …我目前正在通过pandas.io.sql.read_sql()命令将数据查询到数据帧中.我希望并行调用类似于这些人所倡导的调用:(使用Python进行令人尴尬的并行数据库调用(PyData Paris 2015))
像(很一般)的东西:
pools = [ThreadedConnectionPool(1,20,dsn=d) for d in dsns]
connections = [pool.getconn() for pool in pools]
parallel_connection = ParallelConnection(connections)
pandas_cursor = parallel_connection.cursor()
pandas_cursor.execute(my_query)
Run Code Online (Sandbox Code Playgroud)
有可能吗?
我正在使用pyodbc,我想知道我正在使用它的版本.显然我不能使用,pyodbc.__version__因为可能没有设置变量.
我怎么能弄清楚包的版本?
我正在尝试连接在docker容器中运行的pyodbc python脚本以登录到MSSQL数据库我已经尝试了各种docker文件,但是无法建立连接(在构建docker或python尝试连接时失败),有没有人有一个工作的dockerfile,使用pyodbc:
Dockerfile:
# Use an official Python runtime as a parent image
FROM python:2.7-slim
# Set the working directory to /app
WORKDIR /app
# Copy the current directory contents into the container at /app
ADD . /app
# Install any needed packages specified in requirements.txt
RUN pip install -r requirements.txt
# Run app.py when the container launches
CMD ["python", "App.py"]
Run Code Online (Sandbox Code Playgroud)
requirements.TXT
pyodbc
Run Code Online (Sandbox Code Playgroud)
App.Py
import pyodbc
connection = pyodbc.connect('Driver={SQL Server};'
'Server=xxxx;'
'Database=xxx;'
'UID=xxxx;'
'PWD=xxxx')
cursor = connection.cursor()
cursor.execute("SELECT [Id],[Name] FROM …Run Code Online (Sandbox Code Playgroud) 当我尝试安装 Pyodbc 时出现此错误,我已经安装了 Visual Studio 并且我的计算机中安装了 Microsoft Visual C++ 12 、 15-19 ,但仍然出现此错误。
Running setup.py clean for pyodbc
Failed to build pyodbc
Installing collected packages: sqlparse, pytz, asgiref, pyodbc, Django, Pillow, mssql-django, django-crispy-forms
Running setup.py install for pyodbc ... error
ERROR: Command errored out with exit status 1:
command: 'C:\Users\Athar\Desktop\New folder\Project\HeatlhCare\venv\Scripts\python.exe' -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\Athar\\AppData\\Local\\Temp\\pip-install-w0wwm18g\\pyodbc_61963e883a8543fea24a63b1c522bbea\\setup.py'"'"'; __file__='"'"'C:\\Users\\Athar\\AppData\\Local\\Temp\\pip-install-w0wwm18g\\pyodbc_61963e883a8543fea24a63b1c522bbea\\setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' …Run Code Online (Sandbox Code Playgroud) 我想从PyOdbc Cursor中检索完全引用的列名.例如,假设我有2个简单的表格:
Table_1(Id, < some other fields >)Table_2(Id, < some other fields >)我想要检索已连接的数据
select * from Table_1 t1, Table2 t2 where t1.Id = t2.Id
Run Code Online (Sandbox Code Playgroud)
使用pyodbc,像这样:
query = 'select * from Table_1 t1, Table2 t2 where t1.Id = t2.Id'
import pyodbc
conn_string = '<removed>'
connection = pyodbc.connect(conn_string)
cursor = connection.cursor()cursor.execute(query)
Run Code Online (Sandbox Code Playgroud)
然后我想获得列名:
for row in cursor.description:
print row[0]
Run Code Online (Sandbox Code Playgroud)
但如果我这样做,我会得到Id两次我不想要的.理想情况下,我能得到t1.Id并且t2.Id在输出中.
我想到的一些解决方案(以及为什么我真的不想实现它们):
select *一组命名列替换) - 如果我也有,我会这样做,但是对于测试工具来说似乎有些过分有没有更好的办法?任何意见,将不胜感激.
在我正在处理的项目中,我的数据存储在SQL Server中,并带有排序规则Danish_Norwegian_CI_AS.数据通过FreeTDS和ODBC输出到python,处理数据为UTF-8.一些字符,如å,ø和æ,没有被正确编码,导致项目进展停滞不前.
我花了几个小时阅读有关令人困惑的编码,校对和代码页的世界,感觉我已经对整个画面有了更好的理解.
我读过的一些文章让我觉得有可能:在SQL select语句中指定,在输出时,校对数据应编码为UTF-8.
我认为这是可能的原因是这篇文章展示了一个如何获得具有不同排序规则的表格以便一起玩的例子.
任何指向将校对转换为UTF-8/UTF-16的方向,都将非常感谢!
编辑:我已经读过,SQL Server提供了一个unicode选项nchar,nvarchar和ntext,以及其他字符串变量char,varchar并text根据set collation进行编码.我还读到上面提到的unicode选项是用utf-16变体ucs-2编写的(我希望我记得正确).所以; 为了允许locale collation和unicode表,玩得好,应该有转换函数,不是吗?
我正在尝试编写一个Python脚本,可以将Excel工作表导入我的SQL Server Express(带有Windows身份验证)数据库作为表.为此,我pandas用来将Excel文件读入a pandas DataFrame,然后希望用来pandas.to_sql()将数据导入我的数据库.但是,要使用此功能,我需要使用sqlalchemy.create_engine().
我可以pyodbc单独使用连接到我的数据库,并运行测试查询.这个连接使用以下代码完成:
def create_connection(server_name, database_name):
config = dict(server=server_name, database= database_name)
conn_str = ('SERVER={server};DATABASE={database};TRUSTED_CONNECTION=yes')
return pyodbc.connect(r'DRIVER={ODBC Driver 13 for SQL Server};' + conn_str.format(**config))
...
server = '<MY_SERVER_NAME>\SQLEXPRESS'
db = '<MY_DATABASE_NAME>
connection = create_connection(server, db)
cursor = connection.cursor()
cursor.execute('CREATE VIEW test_view AS SELECT * FROM existing_table')
cursor.commit()
Run Code Online (Sandbox Code Playgroud)
然而,由于我不能使用这个并没有多大用处pandas.to_sql()- 这样做我需要一个引擎sqlalchemy.create_engine(),但是我很难弄清楚如何在我create_connection()上面的函数中使用我的相同细节来成功创建引擎并连接到数据库.
我尝试了许多很多组合:
engine = create_engine("mssql+pyodbc://@C<MY_SERVER_NAME>\SQLEXPRESS/<MY_DATABASE_NAME>?driver={ODBC Driver 13 for SQL Server}?trusted_connection=yes")
conn = engine.connect().connection
Run Code Online (Sandbox Code Playgroud)
要么
engine …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用UnixODBC和pyodbc 3.07从Ubuntu 16客户端连接到旧的MySQL 3.23服务器.我尝试了三个(3)版本的MySQL Connector/ODBC和两个(2)来自MariaDB:
MySQL-ODBC 5.3.9仅支持新的mysql身份验证方法.因此无法连接.
MySQL-ODBC 5.1.13有一个用于身份验证方法的开关,但告诉我pyodbc.connect(dsn):[MySQL][ODBC 5.1 Driver]Driver does not support server versions under 4.1.1
MySQL-ODBC 3.51有两个问题:
[MySQL][ODBC 3.51 Driver]Transactions are not enabled (4000) (SQLSetConnnectAttr(SQL_ATTR_AUTOCOMMIT))因为pyodbc将autocommit设置为false作为默认值而失败.pyodbc.connect(dsn, autocommit=True).连接给了我一个游标,但所有cursor.execute(sql)抛出异常('HY000', 'The driver did not supply an error!').从shell中测试与isql的连接通过isql -v [dsn]给我一个会话但是在所有语句上失败[ISQL]ERROR: Could not SQLExecute.所以这似乎是一个unixodbc问题.
我安装了mysql-client.但是programm mysql无法连接服务器.
mariadb-client可以连接到数据库甚至执行语句.这看起来更有希望.
我下载了MariaDB ODBC-Driver 3.0.2.使用该驱动程序与isql返回错误:[S1000][unixODBC][ma-3.0.2]Plugin old_password could not be loaded: lib/mariadb/plugin/old_password.so: cannot open shared object …
我安装了Hortonworks Hive ODBC驱动程序并在数据源中创建了一个连接.我测试了它并且它成功地运行了.
我安装了PyODBC并编写了以下代码
import os, sys, pyodbc;
con = pyodbc.connect("DSN=MyCon")
Run Code Online (Sandbox Code Playgroud)
我收到了错误
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
pyodbc.Error: ('HYC00', '[HYC00] [Hortonworks][ODBC] (11470) Transactions are not supported. (11470) (SQLSetConnnectAttr(SQL_ATTR_AUTOCOMMIT))')
Run Code Online (Sandbox Code Playgroud)
我也试过了
import pyodbc, sys, os
pyodbc.pooling = False
pyodbc.autocommit = False
con = pyodbc.connect("DSN=MyCon")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
pyodbc.Error: ('HYC00', '[HYC00] [Hortonworks][ODBC] (11470) Transactions are not supported. (11470) (SQLSetConnnectAttr(SQL_ATTR_AUTOCOMMIT))')
Run Code Online (Sandbox Code Playgroud)
也试过了
con = pyodbc.connect("DSN=Tenet", autocommit=False)
Traceback (most recent call last): …Run Code Online (Sandbox Code Playgroud)