赞
踩
根据近期学习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)此方法解决
- from sqlalchemy import create_engine,Column,Integer,String
- from sqlalchemy.orm import declarative_base #导入declarative_base用于返回ORM需要的基类
- #from sqlalchemy.ext.declarative import declarative_base #sqlalchemy2.0以下的使用sqlalchemy.ext.declarative
-
- HOSTNAME = '127.0.0.1'#数据库地址
- PORT = '3306'#端口号
- DATABASE = 'db'#库名
- USERNAME = 'root'#用户名
- PASSWORD = '123'#密码
- #把配置信息和以上的连接数据 组合一下 指向DB_URL
- DB_URL = f'mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset-utf-8'
- #create_engine 创建数据库引擎 create_engine函数需要传递一个字符串 链接数据库
- engine = create_engine(DB_URL)
- """以上是链接信息"""
-
- #sqlalchemy2.0版本以上,declarative_base 有所更改包需从sqlalchemy.orm引入,使用declartive_base()时,不加参数,在与数据库连接加入引擎
-
- """以下是创建数据表的ORM"""
- #将创建好的数据库引擎传入declarative_base方法中,会创建一个对象
- #base = declarative_base(engine) #2.0
- base = declarative_base()
- #1、创建一个ORM模型 这个ORM模型必须继承自sqlalchemy提供的基类
- class Users(base):
- """给表起名字: tablename的属性值是数据表的名字"""
- __tablename__ = 'users'
- #2、添加类的属性与数据表的字段进行一一映射,这些属性的数据类型 必须是sqlalchemy提供的数据类型
- id = Column(Integer, primary_key=True, nullable=False,autoincrement=True)
- name = Column(String(50), nullable=False)#String也是一个类 需要传递一个长度参数 这里我设置成50
- age = Column(Integer,primary_key=False, nullable=False)
- #3、将创建好的ORM模型 映射到数据库中执行 创建数据表
- #base.metadata.create_all() #2.0
- base.metadata.create_all(engine)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。