【发布时间】:2017-11-04 10:03:45
【问题描述】:
我正在将数据库从 sqlite 迁移到 mysql。现在我已经将数据迁移到 mysql,我无法使用我的 sqlalchemy 代码(在 Python3 中)在新的 mysql 数据库中访问它。我的印象是 sqlalchemy 语法与数据库无关(即相同的语法可用于访问 sqlite 和 mysql),但情况似乎并非如此。所以我的问题是:除了 Sqlalchemy 之外,是否绝对需要使用 DBAPI 来读取数据?我是否必须编辑我所有的 sqlalchemy 代码才能现在读取 mysql?
文档说:The MySQL dialect uses mysql-python as the default DBAPI. There are many MySQL DBAPIs available, including MySQL-connector-python and OurSQL,我认为这意味着我确实需要一个 DBAPI。
我使用 sqlite 的旧代码在 sqlite 上成功运行:
engine = create_engine('sqlite:///pmids_info.db')
def connection():
conn = engine.connect()
return conn
def load_tables():
metadata = MetaData(bind=engine) #init metadata. will be empty
metadata.reflect(engine) #retrieve db info for metadata (tables, columns, types)
inputPapers = Table('inputPapers', metadata)
return inputPapers
inputPapers = load_tables()
def db_inputPapers_retrieval(user_input):
result = engine.execute("select title, author, journal, pubdate, url from inputPapers where pmid = :0", [user_input])
for row in result:
title = row['title']
author = row['author']
journal = row['journal']
pubdate = row['pubdate']
url = row['url']
apa = str(author+' ('+pubdate+'). '+title+'. '+journal+'. Retrieved from '+url)
return apa
这工作得很好而且花花公子。所以然后我尝试更新它以使用 mysql 数据库,如下所示:
engine = create_engine('mysql://snarkshark@localhost/pmids_info')
起初,当我尝试像这样运行我的示例代码时,它抱怨说我没有MySqlDB。一些谷歌搜索告诉我 MySqlDB 不适用于 Python 3。所以我尝试 pip 安装 pymysql 并将我的引擎语句更改为
engine = create_engine('mysql+pymysql://snarkshark@localhost/pmids_info')
当我尝试调整时,这最终也会给我带来各种语法错误。
所以我想知道的是,是否有任何方法可以让我当前的语法与 mysql 一起使用?由于语法来自 sqlalchemy,我认为它可以完美地用于 mysql 中与之前在 sqlite 中的完全相同的数据。我是否必须通过并更新我的所有数据库函数才能使用 DBAPI 的语法?
【问题讨论】:
标签: mysql database python-3.x sqlite sqlalchemy