无法使用python连接到SQL Server

时间:2015-06-13 15:57:11

标签: python sql-server sqlalchemy pyodbc pymssql

我最近在我的PC上安装了Microsoft SQL Server 2014,因为我想为我正在构建的Web应用程序创建一个数据库(我已经学习了Python一年,并且对SQLite有非常基本的经验)。

安装SQL Server 2014并创建一个名为Users的数据库之后,我只是尝试向我的数据库运行一些非常基本的命令,但我一次又一次地陷入困境!

我已经安装了pymssql和pyodbc,并尝试直接使用这些命令运行命令,但都失败了。 (例如pymssql给我一个TypeError:类型'当我设置变量conn = pymssql.connect(服务器,用户,密码," tempdb")时,NoneType'不可迭代

我最近的尝试是使用SQLalchemy实现我期待已久的SQL数据库连接。但是,安装它之后,它会因以下错误而失败: " sqlalchemy.exc.OperationalError:(pymssql.OperationalError)(20009,' DB-Lib错误消息20009,严重性9:\ n无法连接:Adaptive Server不可用或不存在\ nNet - 未知错误期间的-Lib错误(10035)\ n')"

我需要回答的问题是,如何使用SQLalchemy开始与我的数据库交谈?

我使用的代码如下:         来自sqlalchemy import *

    engine = create_engine('mssql+pymssql://Han & Lew:@SlugarPlum:1433/Users')

    m = MetaData()

    t = Table('t', m,
            Column('id', Integer, primary_key=True),
            Column('x', Integer))

    m.create_all(engine)

是的,我的电脑叫做SlugarPlum。用户是Han&卢。我的服务器名为THELROYSERVER。 DSN = 1433.没有密码。 (我不知道我在网上提供这些信息是否明智,但我所拥有的数据并不敏感,所以我觉得它值得一试。)

此外,如果有人可以指导我使用Python-SQL服务器的超初学者资源,那将是非常棒的,因为我似乎对这看起来有多复杂而受到殴打!

1 个答案:

答案 0 :(得分:1)

Here's a connect function and example for connecting via pyodbc. Connecting via pymssql should be as easy as formatting the connecting string for pymssql. I've provided Windows and Linux options, but only tested on Linux. I hope it helps.

def sqlalchemy_connect(connect_string): 
    """ Connect to the database via ODBC, start SQL Alchemy engine. """

    def connect():
        return pyodbc.connect(connect_string, autocommit=True)

    db = create_engine('mssql://', creator=connect)
    db.echo = False

    return db

def main():
    global DBCONN

    # Linux with FreeTDS
    connect_string = "DRIVER={FreeTDS};SERVER=<server name>;PORT=<port num>;DATABASE=<db>;UID=<user>;PWD=<password>;TDS_Version=<version num>;"

    # Windows with SQL Server
    connect_string = "DRIVER={SQL Server};SERVER=<server name>;PORT=<port num>;DATABASE=<db>;UID=<user>;PWD=<password>;"

    DBCONN = sqlalchemy_connect(connect_string)


if __name__ == "__main__":
    main()
相关问题