在MacOS下使用sqlalchemy 连接sqlserver 数据库

前言

最近有要求,要将数据库换成巨硬家的sqlserver 2012 因为在网上苦苦找不到sqlalchemy 配置连接SqlServer的具体中文步骤,翻了官方文档后把步骤整理出来

前期准备

已经安装好sqlalchemy

运行环境介绍

系统:MacOS 10.13.1 Beta Python 环境: 3.6.0 sqlalchemy 1.1.4 pycode 4.0.19 sqlserver 2012

实施步骤

在sqlalchemy里对于连接sqlserver 是这样介绍的 原文地址http://docs.sqlalchemy.org/en/latest/core/engines.html#sqlalchemy.create_engine

Microsoft SQL Server

The SQL Server dialect uses pyodbc as the default DBAPI. pymssql is also available:

pyodbc

engine = create_engine('mssql+pyodbc://scott:tiger@mydsn')

pymssql

engine = create_engine('mssql+pymssql://scott:tiger@hostname:port/dbname')

因此要想使用sqlalchemy 先要配置pyodbc正常使用当然要是比较省事儿的话可以选择安装pymssql

方法一、安装pymssql

pip3 install pymssql

安装pymssql 需要提前安装依赖
brew install freetds@0.91

brew link freetds@0.91

数据库链接字符串为
ENGINE = create_engine(mssql+pymssql://sa:123456@localhost/test?charset=utf8)

方法二、 安装 pyodbc

如果觉得太慢的话可以后面使用加 -i 参数选择国内源 比如豆瓣

pip3 install pyodbc

pip install pyodbc

配置pyodbc

在Mac os 下pyodbc不是仅仅安装上就可以使用的还需要一些配置才可以 关于pyodbc的官方文档见https://github.com/mkleehammer/pyodbc/wiki

Macos 配置文档见https://github.com/mkleehammer/pyodbc/wiki/Connecting-to-SQL-Server-from-Mac-OSX

以下是对文档中步骤的大致翻译

安装Install FreeTDS and unixODBC 使用Mac 上的命令行软件安装工具

brew update
brew install unixodbc
brew install freetds --with-unixodbc

遇到的坑

在安装过程中有可能因为网络原因导致下载的包不完整导致报类似SHA256 Checksum mismatch 的错误,只要根据提示到到下载路径删除掉不完整的包就可以了

Treetds 配置

使用命令得到freetds.conf的位置

tsql -C

然后在这个文件的后面追加自己的sql server 配置

例如:

[MYMSSQL]
host = mssqlhost.xyz.com
port = 1433
tds version = 7.3

关于不同的数据库与对于的tds version看下面http://www.freetds.org/userguide/choosingtdsprotocol.htm通过上面的配置 mac就可以和SqlServer服务器连接上了,可以使用下面的命令连接进入到sql命令行状态

tsql -S MYMSSQL -U myuser -P mypassword

MYMSSQL 在配置文件总给一个数据库连接起的名字

myuser 连接用的用户

mypassword 用户对应的密码

连接成功后的状态

locale is "en_US.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
1>

可以使用一条sql语句测试一下例如"SELECT @@VERSION"

注意输入完sql语句后 在下一行(enter)输入go才会执行

编辑odbcinst.ini 和 odbc.ini 配置文件

通过命令来 获取odbcinst.ini 和odbc.ini的文件位置

odbcinst -j

将如下内容写入odbcinst.ini

[FreeTDS]
Description=FreeTDS Driver for Linux & MSSQL
Driver=/usr/local/lib/libtdsodbc.so
Setup=/usr/local/lib/libtdsodbc.so
UsageCount=1

将如下内容写入odbc.ini

[MYMSSQL]
Description = Test to SQLServer
Driver = FreeTDS
Servername = MYMSSQL

注意这里的 Servername 就是freetds.conf中配置的名字

接着输入

isql MYMSSQL myuser mypassword

可以输入一些sql语句测试一下

示例代码

通过pyodbc连接数据库
import pyodbc
# the DSN value should be the name of the entry in odbc.ini, not freetds.conf
#将myuser 和mypassword 自己环境中的
conn = pyodbc.connect('DSN=MYMSSQL;UID=myuser;PWD=mypassword')
crsr = conn.cursor()
rows = crsr.execute("select @@VERSION").fetchall()
print(rows)
crsr.close()
conn.close()

如果能出现结果证明连接正常

通过sqlalchemy 操作数据库 例如创建一张表

#!/usr/bin/env python3
import pyodbc,sqlalchemy
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,String,create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.sql import sqltypes ENGINE = create_engine('mssql+pyodbc://admin:123456@MYMSSQL')
Base = declarative_base()
class Userinfo(Base):
__tablename__ = 'userinfo'
id = Column(Integer, primary_key=True, autoincrement=True)
account_id = Column(String(255), nullable=False)
username = Column(String(255),nullable=False)
encrypted_password = Column(sqltypes.VARBINARY(500), nullable=False)
token = Column(String(255)) def init_db():
Base.metadata.create_all(ENGINE) def drop_db():
Base.metadata.drop_all(ENGINE) def session():
cls = sessionmaker(bind=ENGINE)
return cls()
#drop_db()
init_db()

在MacOS下使用sqlalchemy 连接sqlserver2012 数据库的更多相关文章

  1. python使用sqlalchemy连接pymysql数据库

    python使用sqlalchemy连接mysql数据库 字数833 阅读461 评论0 喜欢1 sqlalchemy是python当中比较出名的orm程序. 什么是orm? orm英文全称objec ...

  2. python使用sqlalchemy连接mysql数据库

    环境:centos7+python2.7.5+sqlalchemy sqlalchemy是python当中比较出名的orm程序.在python中,使用sqlalchemy连接mysql数据库进行操作非 ...

  3. Windows下C/C++连接mysql数据库的方法

    步骤 安装MySQL数据库 项目属性页->C/C++->常规->附加包含目录:xxx\mysql Server 5.6\include 项目属性页->链接器->常规-&g ...

  4. .NET平台下使用C#连接各种数据库

    在.NET平台下,通常我们需要连接不同的数据库,这就需要我们配置连接字符串以及提供常用的class进行数据存取. 1.C#连接Access @"Provider=Microsoft.ACE. ...

  5. Delphi 2010下使用sqlitesimpledelphi连接SQLite数据库及中文乱码问题的解决

    应女朋友的要求,要写一款销售管理的软件.用于管理服装店每天的销售记录,已及管理服装店的客户,并对客户进行生日提醒 因为之前使用C#写过一款家庭管理软件,主要是自己用,所以使用了服务器型数据库MySQL ...

  6. CentOS7 (64位) 下QT5.5 连接MySQL数据库(driver not loaded)

    用qt连接MySQL需要共享库 libqsqlmysql.so的驱动,路径在plugin/sqldrivers目录下,乍看已经可用了,其实不然. 用ldd命令分析一下,libmysqlclient_r ...

  7. VS2010下C/C++连接MySql数据库的方法

    1. 新建一个C++控制台程序 2. 选择项目 CMySql属性 3. 选择配置属性 C/C++ 常规 附加包含目录 4. 添加包含目录C:\Program Files\MySQL\Connector ...

  8. Windows 7下通过Excel2007连接Oracle数据库并对表查询

    http://blog.csdn.net/pan_tian/article/details/8133668 1. 环境变量的设置 1.1  ORACLE_HOME环境变量的设置,我这里指向了我的Ora ...

  9. inux 下c/c++ 连接mysql数据库全过程-----已经通过验证

    安装Mysql(还可以下载 .gz包,解压安装,再此只介绍此法,其实都一样了,或百度一下...重点在下下下下面) 1.首先安装Mysql服务器 sudo apt-get install mysql-s ...

随机推荐

  1. 自制微信小程序 提示插件 -- noticeUitis.js

    /* noticeMsg.js by: FEer_llx Modify 2016/08/24 */ function weNotice(obj) { this.fadeFlag = true; thi ...

  2. 关于ionic 打包后 background-image 无法显示 的问题

    这几天费劲心思,终于把ionic 项目打包生成 本地app,但是安卓手机安装以后,我所有的雪碧图的 icon ,竟然无法显示:到处搜索答案,都没有什么可行的,都是说什么ionic版本不对,androi ...

  3. Leetcode之回溯法专题-216. 组合总和 III(Combination Sum III)

    Leetcode之回溯法专题-216. 组合总和 III(Combination Sum III) 同类题目: Leetcode之回溯法专题-39. 组合总数(Combination Sum) Lee ...

  4. Python之变量的创建过程

    Python之变量的创建过程 一.变量创建过程 首先,当我们定义了一个变量name = 'Kwan'的时候,在内存中其实是做了这样一件事: 程序开辟了一块内存空间,将'Kwan'存储进去,再让变量名n ...

  5. Redis的初识

    简介 已经有了Membercache和各种数据库,Redis为什么会产生?Redis纯粹为应用而产生,它是一个高性能的key-value数据库.Redis的出现,很大程序补偿了Memcached这类k ...

  6. netcore 中的动态代理与RPC实现(微服务专题)

    一.关于RPC的调用 1. 调用者(客户端Client)以本地调用的方式发起调用: 2. Client stub(客户端存根)收到调用后,负责将被调用的方法名.参数等打包编码成特定格式的能进行网络传输 ...

  7. 深入理解static关键字

    class A{ public int i = 10; public void show(){ System.out.printf("%d",i); } } class M{ pu ...

  8. CF 551 E GukiZ and GukiZiana

    https://codeforces.com/contest/551/problem/E 分块真强. 题意就是1.区间加,2.询问整个区间中,最远的两个x的距离. 分块,然后,每次找位子用二分找即可. ...

  9. 牛客OI测试赛 F 子序列 组合数学 欧拉降幂公式模板

    链接:https://www.nowcoder.com/acm/contest/181/F来源:牛客网 题目描述 给出一个长度为n的序列,你需要计算出所有长度为k的子序列中,除最大最小数之外所有数的乘 ...

  10. CodeForces - 1118 F2 Tree Cutting

    题目传送门 题解: 先注意到一定存在k种颜色,切成k个块, 然后要求每个块内的颜色都一样,所以可以发现同一种颜色一定在同一个块内,故任意2个相同颜色的最短路劲上的点的颜色都是该颜色. 我们可以先把任意 ...