热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

pyodbc连接mysql和mssql

产品需要支持不同数据库作为数据来源,python的pyodbc可以支持这个功能,为了使用odbc,需要安装unixodbc,libmyodbc(mysql),freetds(mss

产品需要支持不同数据库作为数据来源,python的pyodbc可以支持这个功能,为了使用odbc,需要安装unixodbc,libmyodbc(mysql),freetds(ms sql server),还需要做一些配置,记录如下。

安装unixodbc

两种方式:

sudo apt-get install unixODBC unixODBC-dev

或者下载源码安装:

./configure
make
sudo make install
连接MySql

安装libmyodbc

sudo apt-get install libmyodbc

找到安装位置

find / |grep libmyodbc.so

配置odbcinst.ini

该文件一般在/etc/odbcinst.ini,配置如下:

[MySQL]
Description = MySQL
Driver = /usr/lib/x86_64-linux-gnu/odbc/libmyodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libodbcmyS.so
FileUsage = 1

libmyodbc的位置就是上一步找到的位置

配置odbc.ini

该文件一般在/etc/odbc.ini,配置如下:

[Mysql]
Description = The Database for Mysql
Trace = On
TraceFile = stderr
Driver = MySQL 这里的MySQL就是上一步odbcinst.ini里的名字
SERVER = localhost
USER =
PASSWORD =
PORT = 3306
DATABASE = test

测试连接Mysql

ly@ly-VirtualBox:/tmp$ isql Mysql
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
连接MS Sql server

安装freetds

sudo apt-get install freetds-dev tdsodbc

类似mysql找到安装位置

配置freetds

配置文件/etc/freetds/freetds.conf

[tdsserver]
host = 127.0.0.1
port = 1401
tds version = 7.0
client charset = UTF-8

测试freetds连接数据库

tsql -S tdsserver -U username -P passwd

配置odbcinst.ini

类似上面mysql的配置如下:

[FreeTDS]
Description = TDS driver (Sybase/MS SQL)
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
FileUsage = 1

配置odbc.ini

类似上面mysql的配置如下:

[sqlserverdatasource]
Driver = FreeTDS
Description = ODBC connection via FreeTDS
Trace = On
Servername = tdsserver 这里的值是/etc/freetds/freetds.conf里面的名字
USER =
PASSWORD =
Database = test

测试连接Mssql

ly@ly-VirtualBox:/tmp$ isql sqlserverdatasource *username passwd*
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
问题

[unixODBC][Driver Manager]Data source name not found, and no default

ly@ly-VirtualBox:/tmp$ odbcinst -j
unixODBC 2.3.4
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /etc/odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

这里的文件位置要和实际的配置文件一致,如果不一致的话需要:

export ODBCINI= /etc/odbc.ini
export ODBCSYSINI= /etc
python代码

import pyodbc
from sqlalchemy import create_engine
import pandas as pd
encoding = "utf8"
database_type = "mysql"
user_name = ""
password = ""
dsn = "Mysql"
dsn = "sqlserverdatasource"
database_type = "mssql"
user_name = ""
password = ""
url = "{}+pyodbc://{}:{}@{}".format(database_type, user_name, password, dsn)
engine=create_engine(url, encoding=encoding, echo=True)
print(engine.table_names())
df = pd.read_csv('/tmp/train.csv')
df.to_sql(con=engine, name="test", if_exists='replace',index=False)
sql = 'select * from test'
data = pd.read_sql(sql, engine)
print(data)
参考

https://tryolabs.com/blog/2012/06/25/connecting-sql-server-database-python-under-ubuntu/
https://docs.microsoft.com/zh-cn/sql/linux/quickstart-install-connect-docker


推荐阅读
author-avatar
手机用户2502857113
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有