当前位置:   article > 正文

python SQLALchemy ORM模型映射_the ``declarative_base()`` function is now availab

the ``declarative_base()`` function is now available as sqlalchemy.orm.decla

根据近期学习python 数据库时,遇到的一些问题

sqlalchemy版本产生的问题

1.更改引入的包

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)

此问题需通过改变引入的包来解决,sqlalchemy2.0以上时,sqlalchemy.ext.declarative已不适用,需改为sqlalchemy.orm

2.更改数据库引擎的引入方法

base = declarative_base(engine)
TypeError: declarative_base() takes 0 positional arguments but 1 was given

base = declarative_base(engine)  此方法已不适用

需采用base.metadata.create_all(engine)此方法解决

  1. from sqlalchemy import create_engine,Column,Integer,String
  2. from sqlalchemy.orm import declarative_base #导入declarative_base用于返回ORM需要的基类
  3. #from sqlalchemy.ext.declarative import declarative_base #sqlalchemy2.0以下的使用sqlalchemy.ext.declarative
  4. HOSTNAME = '127.0.0.1'#数据库地址
  5. PORT = '3306'#端口号
  6. DATABASE = 'db'#库名
  7. USERNAME = 'root'#用户名
  8. PASSWORD = '123'#密码
  9. #把配置信息和以上的连接数据 组合一下 指向DB_URL
  10. DB_URL = f'mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset-utf-8'
  11. #create_engine 创建数据库引擎 create_engine函数需要传递一个字符串 链接数据库
  12. engine = create_engine(DB_URL)
  13. """以上是链接信息"""
  14. #sqlalchemy2.0版本以上,declarative_base 有所更改包需从sqlalchemy.orm引入,使用declartive_base()时,不加参数,在与数据库连接加入引擎
  15. """以下是创建数据表的ORM"""
  16. #将创建好的数据库引擎传入declarative_base方法中,会创建一个对象
  17. #base = declarative_base(engine) #2.0
  18. base = declarative_base()
  19. #1、创建一个ORM模型 这个ORM模型必须继承自sqlalchemy提供的基类
  20. class Users(base):
  21. """给表起名字: tablename的属性值是数据表的名字"""
  22. __tablename__ = 'users'
  23. #2、添加类的属性与数据表的字段进行一一映射,这些属性的数据类型 必须是sqlalchemy提供的数据类型
  24. id = Column(Integer, primary_key=True, nullable=False,autoincrement=True)
  25. name = Column(String(50), nullable=False)#String也是一个类 需要传递一个长度参数 这里我设置成50
  26. age = Column(Integer,primary_key=False, nullable=False)
  27. #3、将创建好的ORM模型 映射到数据库中执行 创建数据表
  28. #base.metadata.create_all() #2.0
  29. base.metadata.create_all(engine)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/180990
推荐阅读
相关标签
  

闽ICP备14008679号