【问题标题】:Creating a mysql database using sqlalchemy使用 sqlalchemy 创建 mysql 数据库
【发布时间】:2019-07-10 22:30:48
【问题描述】:

我正在尝试使用 sqlalchemy 创建一个 mysql 数据库。

我有一个包含 sqlite 数据库的烧瓶网络应用程序。我正在尝试切换到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)

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

任何能帮助我指明正确方向的帮助都将不胜感激。

【问题讨论】:

    标签: python mysql flask sqlalchemy


    【解决方案1】:

    a) mysql 的正确 DBURI 语法是:

    mysql://username:password@servername/databasename

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

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

    c) 您现在应该可以运行 Python 代码在空数据库中创建表了。

    【讨论】:

    • 谢谢@codeape。这正是我所缺少的。对于其他想知道@codeape 提出的第一点的人。 mysql 不像 sqlite 那样将数据库存储在单个文件中,就像database_name.db。相反,它会创建一个目录database_name。因此指定文件类型“.db”是无效的。
    • 这对我有用,但我想知道 .py 文件本身没有办法让 sqlalchemy 去“尝试连接到这个数据库;如果它还不存在,运行 CREATE DATABASE databasename;”?
    猜你喜欢
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    • 2021-06-24
    • 2015-06-06
    • 2021-05-25
    • 1970-01-01
    • 2017-02-25
    相关资源
    最近更新 更多