使用SQLAlchemy创建MySQL数据库

4
我正在尝试使用SQLAlchemy创建一个MySQL数据库。
我有一个包含SQLite数据库的Flask Web应用程序。我想切换到MySQL。我对SQLAlchemy相当新,并已经学习了如何通过SQLAlchemy创建数据库。然而,这些数据库都是SQLite数据库。我正在尝试使用SQLAlchemy创建一个MySQL数据库,但在阅读多篇文章后,仍然无法成功。
我还安装了python-mysqldb。
以下是用于创建SQLite数据库的原始代码片段:
Base = declarative_base()

class Categories(Base):
    __tablename__ = 'categories'
    id = Column(Integer, primary_key=True)
    name = Column(String, unique=True)
    image = Column(String)
    link = Column(String)
    description = Column(String)

if __name__ =='__main__':
    engine = create_engine('sqlite:///app/database/main.db', echo=True)
    Base.metadata.create_all(engine)

MySQL 尝试

if __name__ =='__main__':
    engine = create_engine('mysql://user:password@localhost/app/database/main.db', echo=True)
    Base.metadata.create_all(engine)

MySQL第二次尝试

if __name__ =='__main__':
    engine = create_engine('mysql://user:password@localhost/app/database/main.db', echo=True)
    engine.execute("CREATE DATABASE main.db")
    engine.execute("USE main.db")

我收到的错误信息。
sqlalchemy.exc.OperationalError: (_mysql_exceptions.OperationalError) (1049, "Unknown database 'app/database/main.db'") (Background on this error at: http://sqlalche.me/e/e3q8)

我最好的猜测是,我在使用sqlalchemy与mysql时显然缺少某些东西。

任何帮助,即使只是指引我正确方向,都将不胜感激。

1个回答

1

a) mysql的正确DBURI语法是:

mysql://用户名:密码@服务器名/数据库名

b) 必须先创建数据库databasename。所以在运行Python.create_all()之前,您应该使用命令行mysql客户端连接到db服务器并执行CREATE DATABASE databasename语句来创建一个空数据库:

$ mysql -u username -p
... type password
> CREATE DATABASE databasename;

c) 现在您应该能够运行Python代码,创建空数据库中的表。


谢谢@codeape。这正是我所缺少的。对于其他人想知道@codeape提到的第一点,mysql不像sqlite那样将数据库存储在单个文件database_name.db中。相反,它创建一个名为database_name的目录。因此,指定文件类型“.db”是无效的。 - jdlk07
1
这对我有用,但我想知道在 .py 文件本身中是否有办法让 sqlalchemy 去“尝试连接到这个数据库;如果它还不存在,则运行CREATE DATABASE databasename;”? - Roly Poly

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接