【问题标题】:Python - Convert pyodbc code to SQLAlchemyPython - 将 pyodbc 代码转换为 SQLAlchemy
【发布时间】:2018-02-08 09:36:59
【问题描述】:

我有用于连接到 DSN 的 pyodbc 代码,但由于某种原因它不再工作,我不知道为什么(驱动程序是空的,即使它们在那里)。

所以我想尝试将所有内容转换为使用 SQLAlchemy。

我目前连接数据库的代码是:

conn = pyodbc.connect('DSN=QueryBuilder')
cursor = conn.cursor()
stringA = "SELECT GrantInformation.Call FROM GrantInformation"
cursor.execute(stringA)
rows = cursor.fetchall()

我如何在 SQLAlchemy 中做到这一点,我已经检查了文档,但我仍然感到困惑。

非常感谢


我用过:

from sqlalchemy import create_engine

engine = create_engine("""{}://{}:{}@{}/{}"""
                           .format(SQL Server,nick,mypassword,myservername,querybuilder))

df = pd.read_sql_query("SELECT GrantInformation.Call FROM GrantInformation")

我得到了:

File "<ipython-input-5-f7837462519f>", line 4
    .format(SQL Server,nick,mypassword,myservername,querybuilder))
                     ^
SyntaxError: invalid syntax

之前也声明了变量,现在得到:

ArgumentError: Could not parse rfc1738 URL from string 'SQL Server://nick:mypassword@myhost/querybuilder'

【问题讨论】:

    标签: python sqlalchemy pyodbc


    【解决方案1】:
    from sqlalchemy import create_engine
    
    engine = create_engine("""{}://{}:{}@{}/{}"""
                               .format(driver,user,password,host,database))
    
    df = pd.read_sql_query("SELECT GrantInformation.Call FROM GrantInformation", engine)
    

    【讨论】:

    • 您好,感谢您的快速回复。我尝试使用您的答案,但语法无效。我尝试对所有条目使用引号,但仍然出现语法错误。我将我所做的添加到我的问题中。任何帮助将不胜感激:)
    • 是的,所有条目都使用引号。如果您使用的是 SQL Server,请尝试driver='mssql'
    • 嗯。可能我的安装有问题... 获取:C:\Users\nick\AppData\Local\Continuum\anaconda3\lib\site-packages\sqlalchemy\connectors\pyodbc.py:92: SAWarning: No driver name specified;这是 PyODBC 在使用无 DSN 连接时所期望的“未指定驱动程序名称;”
    • 然后:TypeError: read_sql_query() missing 1 required positional argument: 'con'
    • 抱歉忘记将engine 添加到read_sql_query,现在已编辑。关于驱动的错误,试试mssql+pyodbc
    【解决方案2】:

    使用以下代码格式之一创建引擎

    from sqlalchemy import create_engine
    
    # default
    engine = create_engine('mysql://scott:tiger@localhost/foo')
    
    # mysql-python
    engine = create_engine('mysql+mysqldb://scott:tiger@localhost/foo')
    
    # MySQL-connector-python
    engine = create_engine('mysql+mysqlconnector://scott:tiger@localhost/foo')
    
    # OurSQL
    engine = create_engine('mysql+oursql://scott:tiger@localhost/foo')
    
    # query
    connection = engine.connect()
    result = connection.execute("select username from users")
    

    数据库名称 = foo,用户名 = scott,密码 = Tiger,主机 = localhost

    参考:http://docs.sqlalchemy.org/en/latest/dialects/mysql.html

    【讨论】:

    • 嘿,谢谢。不幸的是,我没有使用 mysql,我使用的是 SQL 服务器,所以它没有找到数据库:/
    猜你喜欢
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    相关资源
    最近更新 更多