【SQLAlChemy】常见的数据范例有哪些,Column可选的参数有哪些呢? ...

打印 上一主题 下一主题

主题 858|帖子 858|积分 2574

常见数据范例与Column参数

常见范例


  • Integer:整数范例,对应数据库的 int 范例。
  • Float:浮点数范例,对应数据库的 float 范例。它占用 32 位空间。
  • Double:双精度浮点数范例,对应数据库的 double 范例,占用 64 位空间。需要留意的是在 SQLAlchemy 中没有 Double 范例。
  • String:可变字符范例,对应数据库的 varchar 范例。
  • Boolean:布尔范例,对应数据库的 tinyint 范例。
  • DECIMAL:定点数范例,主要用于解决浮点数精度题目。在存储与金钱干系的字段时,推荐利用此数据范例。利用时需要传递两个参数,第一个参数表现字段能存储的总位数,第二个参数表现小数点后的位数。
  • Enum:罗列范例,限定字段值只能为预设的几个值。在 ORM 模型中,利用 Enum 范例表现罗列。也可以用 Python3 内置的 enum 模块定义字段。
  • Date:日期范例,只能存储年代日。对应数据库的 date 范例。在 Python 代码中,可以利用 datetime.date 来指定。
  • DateTime:日期时间范例,可以存储年代日时分秒毫秒等。对应数据库的 datetime 范例。在 Python 代码中,可以利用 datetime.datetime 来指定。
  • Time:时间范例,可以存储时分秒。对应数据库的 time 范例。在 Python 代码中,可以利用 datetime.time 来指定。
  • Text:长字符串范例,一般可以存储凌驾 6 万个字符。如果超出这个范围,可以利用 LONGTEXT 范例。对应数据库的 text 范例。
  • LONGTEXT:超长文本范例,对应数据库的 longtext 范例。
常见的 Column 参数


  • primary_key:将此字段设置为主键,需要设定值为 True。
  • autoincrement:将此字段设置为主动递增,需设定值为 True。
  • default:为某个字段设置默认值,常用于如发布时间等字段。
  • nullable:确定某个字段是否可以为空。默认值为 True,意味着该字段可以为空。
  • unique:确定某个字段的值是否需唯一。默认值为 False。
  • onupdate:在更新数据时会调用这个参数指定的值或函数。初次插入数据时,不会利用 onupdate 的值,而是利用 default 的值。这个参数常用于 update_time 字段(每次数据更新时都需更新该字段的值)。
  • name:指定 ORM 模型中的某个属性映射到表中的字段名。如果未指定,则会利用该属性的名称作为字段名。如果已指定,则会利用指定的值作为表字段名。该参数也可以作为位置参数,在第一个参数中指定,如:
      title = Column(String(50),name='title',nullable=False)
    或者
    title = Column('my_title',String(50),nullable=False)。
样例实现

  1. class News(Base):
  2.     __tablename__ = 'news'
  3.     # id 整数类型,限制主键自增
  4.     id = Column(Integer, primary_key=True, autoincrement=True)
  5.     # 标题 长度为 100 字符类型, 不能为空
  6.     title = Column(String(100), nullable=False)
  7.     # 作者电话 字符类型 唯一
  8.     author_telephone = Column(String(11), unique=True, nullable=False)
  9.     # 是否删除 整型,不能为空, 默认为 0
  10.     is_delete = Column(Integer, nullable=False, default=0)
  11.     # 是否公开 布尔类型, 不能为空, 默认为 True
  12.     is_published = Column(Boolean, nullable=False, default=True)
  13.     # 标题1 枚举类型 常规写法
  14.     tag1 = Column(Enum('python', 'java', 'go', 'javascript'))
  15.     # 标题2 枚举类型 另一种写法
  16.     tag2 = Column(Enum(TagEnum))
  17.     # 时间的三种类型
  18.     created_at = Column(Date, default=datetime.datetime.now)
  19.     updated_at = Column(DateTime, onupdate=datetime.datetime.now, default=datetime.datetime.now)
  20.     published_at = Column(Time)
  21.     # 文本的两种类型
  22.     content1 = Column(Text)
  23.     content2 = Column(LONGTEXT)
复制代码
生成的数据库表字段如下:

生成的 SQL 语句如下:
  1. create table news
  2. (
  3.     id               int auto_increment
  4.         primary key,
  5.     title            varchar(100)                                      not null,
  6.     author_telephone varchar(11)                                       not null,
  7.     is_delete        int                                               not null,
  8.     is_published     tinyint(1)                                        not null,
  9.     tag1             enum ('python', 'java', 'go', 'javascript')       null,
  10.     tag2             enum ('python', 'java', 'c', 'javascript', 'cpp') null,
  11.     created_at       date                                              null,
  12.     updated_at       datetime                                          null,
  13.     published_at     time                                              null,
  14.     content1         text                                              null,
  15.     content2         longtext                                          null,
  16.     constraint author_telephone
  17.         unique (author_telephone)
  18. );
复制代码
测试样例

新增一条数据,并更新干系字段值。
  1. # 新建一个会话对象
  2. session = sessionmaker(bind=engine)()
  3. # 创建一个 new 对象
  4. new_demo = News(title='测试new',
  5.                 author_telephone='15991367893',
  6.                 is_delete=0,
  7.                 is_published=True,
  8.                 tag1='go',
  9.                 tag2=TagEnum.c,
  10.                 created_at=datetime.datetime.now(),
  11.                 updated_at=datetime.datetime.now(),
  12.                 published_at=datetime.time(),
  13.                 content1='这是一个测试性内容1',
  14.                 content2='这是一个测试性内容2')
  15. # session.add(new_demo)
  16. # session.commit()
  17. # session.close()
  18. # 测试 onupdate 参数
  19. a_new = session.query(News).first()
  20. a_new.title = '这是修改后的标题'
  21. a_new.author_telephone = '15991367894'
  22. # 提交事物
  23. session.commit()
  24. session.close()
复制代码
留意

我们设置了author_telephone此处有些不敷,不能满意正常开发需求,切忌在项目中利用。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

农妇山泉一亩田

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表