当前位置: 首页 > 知识库问答 >
问题:

mysql - 运行后一直报错,找不到错误在哪里?

卓星波
2024-06-27
from sqlalchemy.dialects.mysql import INTEGER,VARCHAR
from sqlalchemy import Column
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
Base=declarative_base()


# Users表结构
class Users(Base):
    __tablename__='users'
    id = Column(INTEGER , primary_key = True)
    name = Column(VARCHAR(256) , nullable = False)
    age = Column(INTEGER)
    place = Column (VARCHAR(256),nullable = False)

    def __init__(self , id , name , age , place):
        self.id = id
        self.name = name
        self.age = age
        self.place = place

def init_db():
    engine = create_engine(
        "mysql+pymysql ://root :123456 @localhost/hjwzd",
        encoding = "utf-8",
        echo = True,
        autocommit=True     #设置自动提交
    )
    Base.metadata.create_all(engine)
    print('Create table successfully!')
    #建立数据库连接


if __name__=='__main__':
    init_db()
PS C:\Users\86181\Desktop\violeter> & c:/Users/86181/Desktop/violeter/.venv/Scripts/python.exe "c:/Users/86181/Desktop/violeter/Face recognition/create_table.py"
c:\Users\86181\Desktop\violeter\Face recognition\create_table.py:10: MovedIn20Warning: The ``declarative_base()`` function is now available as sqlalchemy.orm.declarative_base(). (deprecated since: 2.0) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)
  Base=declarative_base()
Traceback (most recent call last):
  File "c:\Users\86181\Desktop\violeter\Face recognition\create_table.py", line 40, in <module>
    init_db()
  File "c:\Users\86181\Desktop\violeter\Face recognition\create_table.py", line 28, in init_db
    engine = create_engine(
             ^^^^^^^^^^^^^^
  File "<string>", line 2, in create_engine
  File "C:\Users\86181\Desktop\violeter\.venv\Lib\site-packages\sqlalchemy\util\deprecations.py", line 281, in warned
    return fn(*args, **kwargs)  # type: ignore[no-any-return]
           ^^^^^^^^^^^^^^^^^^^
  File "C:\Users\86181\Desktop\violeter\.venv\Lib\site-packages\sqlalchemy\engine\create.py", line 546, in create_engine
    u = _url.make_url(url)
        ^^^^^^^^^^^^^^^^^^
  File "C:\Users\86181\Desktop\violeter\.venv\Lib\site-packages\sqlalchemy\engine\url.py", line 842, in make_url
    return _parse_url(name_or_url)
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\86181\Desktop\violeter\.venv\Lib\site-packages\sqlalchemy\engine\url.py", line 908, in _parse_url
    raise exc.ArgumentError(
sqlalchemy.exc.ArgumentError: Could not parse SQLAlchemy URL from string 'mysql+pymysql ://root :123456 @localhost/hjwzd'
PS C:\Users\86181\Desktop\violeter> 

共有3个答案

冷俊健
2024-06-27
sqlalchemy.exc.ArgumentError: Could not parse SQLAlchemy URL from string 'mysql+pymysql ://root :123456 @localhost/hjwzd'

这一行说明了你这个数据库url就有问题呀,去掉所有的空格试试:

mysql+pymysql://root:123456@localhost/hjwzd
邹海荣
2024-06-27

create_engine的参数不能加空格

巢海
2024-06-27

答案

在提供的代码中,数据库连接字符串中的URL格式不正确。具体来说,mysql+pymysql ://root :123456 @localhost/hjwzd 中密码部分与用户名之间的空格以及冒号后的空格都应该被移除。正确的格式应该使用冒号(:)来分隔用户名和密码,并且用户名和密码之间不应该有空格。

修正后的代码如下:

from sqlalchemy.dialects.mysql import INTEGER, VARCHAR
from sqlalchemy import Column
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()

# ... (其余代码保持不变)

def init_db():
    engine = create_engine(
        "mysql+pymysql://root:123456@localhost/hjwzd",  # 修正后的URL
        encoding="utf-8",
        echo=True,
        autocommit=True  # 设置自动提交
    )
    Base.metadata.create_all(engine)
    print('Create table successfully!')

# ... (其余代码保持不变)

此外,还需要注意,如果你的SQLAlchemy版本是2.0或更高,declarative_base() 已经被视为过时的调用方式,但在这个上下文中,它仍然可以工作,但可能会在未来的版本中完全移除。为了兼容性,建议按照警告信息中提供的链接查看SQLAlchemy 2.0的文档,并更新你的代码。

解释

错误发生在尝试使用create_engine函数创建数据库引擎时,因为它无法解析提供的数据库URL。这通常是因为URL格式不正确。在提供的URL中,用户名(root)和密码(123456)之间的空格以及密码后的空格导致了无法正确解析。移除这些空格后,URL就可以被正确解析了。

 类似资料:
  • 在运行java by Notepad++脚本之前,我在Win 7 Ultimate中仅使用文件名(例如和java程序)运行java by。 在使用Notepad++脚本并将Java更新到版本后,我只能通过Notepad++运行Java。我得到了 即使是我也可以在命令行中运行它 我只是好奇可能会有什么问题。

  • 问题内容: 我在mysql 5.6社区版中遇到以下错误: 如何解决此错误? 问题答案: 这解决了我的问题。 / *临时修复Windows 7计算机上MySQL 5.6.10的Windows安装程序的问题。我在干净安装的MySql上执行了该过程,并且对我有用,至少它停止了日志中的innodb错误行以及使用了瞬态innodb表。因此,风险自负。 从mysql删除这些表:innodb_index_sta

  • 我发现下面的讨论是:得到一个 “在$PATH中找不到可执行文件” 那解决了我的问题,但只是部分的。在我的最后一个命令中,我指定: 映像生成时没有任何错误或警告。但是,当我docker运行时,我现在得到以下错误: /bin/sh:1:/home/ubuntu/node-v0.10.16-linux-x64/bin/node:找不到 该目录包含在我的语句中。我还需要找什么?

  • 我在iOS中运行flutter应用程序时出错。 Xcode版本:13 模拟器 : iPhone 13 (版本 15.0) 错误: 我试过了: 删除 Podfile.lock 什么都没用

  • 我的系统似乎不愿意找到mysql模块。在尝试allot之后,我仍然得到Modulenotfound错误:没有名为MySQL的模块。这是我到目前为止所做的: 1. 2. 这似乎不起作用,所以我做了以下操作: 但这似乎也不起作用。 此外,我的系统似乎找不到mysql-connector-python-rf 有什么可能出问题的猜测吗?

  • npm install --legacy-peer-deps 运行之后 开始疯狂报错