精华内容
下载资源
问答
  • 我们通过sqlalchemy定义模型创建的数据库表,通常会通过ORM的方式操作,但开发的过程中难免也会遇到不通过ORM而直接操作数据库的情况。这时我们定义模型时,给字段设置的默认值就不能安装以前的方法了,这里有些...

    我们通过sqlalchemy定义模型创建的数据库表,通常会通过ORM的方式操作,但在开发的过程中难免也会遇到不通过ORM而直接操作数据库的情况。这时我们在定义模型时,给字段设置的默认值就不能安装以前的方法了,这里有些坑我先踩过了,在此记录一下已便他人查阅。

    比如我们现在想创建一张user表,根据需求几个字段的默认值设置如下:

    • is_vip字段设置默认值为0
    • create_time字段默认值设置为该行插入的时间
    • update_time字段能够在该行改变时自动更新时间

    通常我们会这样创建user表:

    from sqlalchemy import Column, String, create_engine, Integer, DateTime
    from sqlalchemy.sql import func
    from sqlalchemy.ext.declarative import declarative_base
    
    
    # 创建对象的基类:
    Base = declarative_base()
    
    class User(Base):
        __tablename__ = 'user'
    
        id = Column(String(36), primary_key=True)
        name = Column(String(20))
        is_vip = Column(Integer, default=0)
        create_time = Column(DateTime, nullable=False, default=datetime.datetime.now)
        update_time = Column(DateTime, nullable=False, onupdate=True)
       
    
    # 初始化数据库连接:
    engine = create_engine('mysql+pymysql://root:111111@localhost:3306/testdb')
    Base.metadata.create_all(engine)
    

    看起来一切都那么完美,没有任何问题,但是我们查看一下生成的DDL:

    CREATE TABLE `user` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(20) DEFAULT NULL,
      `is_vip` int(11) DEFAULT NULL,
      `create_time` datetime NOT NULL,
      `update_time` datetime NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    

    默认值和自动更新都没有设置成功,想要默认值和自动更新生效就只能通过ORM操作数据库。那该怎么办呢?下面揭晓正确的操作姿势。

    from sqlalchemy import Column, String, Integer, DateTime, TIMESTAMP
    from sqlalchemy.sql import func
    
    
    class User1(Base):
        # 表的名字:
        __tablename__ = 'user1'
    
        id = Column(Integer, primary_key=True)
        name = Column(String(20))
        # 数据库设置默认值 需是字符串
        is_vip = Column(Integer, server_default='0')
        # 默认值是创建时间 不自动更新
        create_time = Column(DateTime, nullable=False, server_default=func.now())
        # 自动更新 需要设置nullable=False
        update_time = Column(TIMESTAMP, nullable=False)
    

    使用server_default在数据库中直接生成默认值,需要注意的是Integer默认值不能直接设置数字,需要是字符串;DateTime默认值需要使用func.now();自动更新的时间戳可以使用TIMESTAMP,只需设置nullable=False即可
    下面是生成的DDL:

    CREATE TABLE `user1` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(20) DEFAULT NULL,
      `is_vip` int(11) DEFAULT '0',
      `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
      `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;



    作者:__robin
    链接:https://www.jianshu.com/p/6d3ec5851f3a
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    展开全文
  • php 修改数据库表字段的值

    千次阅读 2018-09-22 20:37:05
    微信小程序开发交流qq群 ...php 前端传递参数,遍历数据库表字段后根据条件进行修改。 <?php header("Content-Type:text/html;charset=utf8"); header("Access-Control-Allow-Origin: *"); //解决跨域 ...

    微信小程序开发交流qq群   173683895

       承接微信小程序开发。扫码加微信。

     

    php 前端传递参数,遍历数据库表的字段后根据条件进行修改。

    <?php
        header("Content-Type:text/html;charset=utf8"); 
        header("Access-Control-Allow-Origin: *"); //解决跨域
        header('Access-Control-Allow-Methods:POST');// 响应类型  
        header('Access-Control-Allow-Headers:*'); // 响应头设置 
        $link=mysql_connect("localhost","root","root"); 
        mysql_select_db("business_card", $link); //选择数据库
        mysql_query("SET NAMES utf8");//解决中文乱码问题
    	
        $wx_id = $_POST['wx_id'];
        $openid = $_POST['openid'];
        $q = "SELECT * FROM user"; //SQL查询语句 SELECT * FROM 表名
        $rs = mysql_query($q); //获取数据集
        if(!$rs){die("数据库没有数据!");}
    	
    	//循环读取数据并存入数组对象
        $dlogs;$i=1;
        while($row=mysql_fetch_array($rs))
        {
    	$result = @mysql_query($strsql);
            if($row["openid"]==$openid){
    			if($row["collect"]!=""){
    			$ab =$row["collect"].','.$wx_id;
    			}else{
    			$ab =$wx_id;
    			}
    			//修改数据库字段
    			mysql_query("UPDATE user SET collect = '$ab'
    			WHERE openid = '$openid'");
    
        echo urldecode(json_encode($ab));
    		}
        }
    	
    	
        //以json格式返回html页面
       
        
    ?>

     

    展开全文
  • 数据库表字段命名规范

    万次阅读 2018-03-09 10:15:09
    1.数据库表命名规范:(1)表名前应该加上前缀,的前缀一个用系统或模块的英文名称缩写,前缀全部大写或首字母大写,表名中包含的单词首字母...(4)在数据库表命名时应该用英文单词的单数形式,如员工命名:应该为...

    1.数据库表命名规范:

    (1)表名前应该加上前缀,表的前缀一个用系统或模块的英文名称缩写,前缀全部大写或首字母大写,表名中包含的单词首字母大写。

    (2)数据库表名应该有意义,并且易于理解,最好使用可以表达功能的英文单词或缩写,如果用英文单词表示,建议使用完整的英文单词。

    (3)表名不可以太长,最好不要超过3个英文单词长度(22个字母)。

    (4)在数据库表命名时应该用英文单词的单数形式,如员工表命名:应该为Employee而不是Employees .

    (5)如果是后台表命名时应该在表名基础上加上后缀
    _b
    (back 
    首字母 )

    (6)在表创建完成前,应该为表添加表的注释


    2.表字段命名规范:

    (1)数据库表字段应该是有意义而且易于理解的,最好是能够表达字段含义的英文字母

    (有人认为如果用英文单词作为字段,因为翻译工具不同,而字段不统一建议使用汉语拼音首字母缩写
    ;有人认为用汉语拼音缩写看起来不直观,老半天也不知道到底这个字段是干什么的

    (2)系统中所有属于内码,即仅用于标识唯一性和程序内部用到的标识性字段,字段名称建议取为 ID ,采用类型为整型或长整型.

    (3)系统中属于是业务内的编号字段,代表一定业务信息,建议字段命名为
    code , 
    如工作单编号
    wf_code .

    (4) 不要在数据库表字段(列名)中包含数据类型,如:datetime

    (5)不要在数据库表字段(列名)命名时重复表名,可以使用表名首字母(不包含数据库表名前缀)

    注意:
    不要在数据库表字段(列名)命名时
    不建议使用数据库关键字,如:name,time ,datetime password 


    3.表设计规范:

    (1)所有字段在设计时,除以下数据类型timestampimagedatetimesmalldatetimeuniqueidentifierbinarysql_variantbinaryvarbinary外,必须有默认值。字符型的默认值为一个空字符值串’’;数值型的默认值为数值0;逻辑型的默认值为数值0

    其中:系统中所有逻辑型中数值0表示为“假”;数值1表示为“真”。


    datetime
    smalldatetime类型的字段没有默认值,必须为NULL

    (2)当字段定义为字符串形时建议使用varchar而不用nvarchar


    MySQL5.0以上的版本中,varchar数据类型的长度支持到了65535,也就是说可以存放65532个字节的数据,起始位和结束位占去了3
    字节。

    (3)建议在大多数表中(如工作单),应都有以下字段:

    字段名说明类型默认值

    CreatorID创建者int
    默认值为
    0

    CreatedTime创建时间Datetime
    默认值为NULL

    (4)字段的描述

    a.字段必须填写描述信息(注释)

    b.尽量遵守第三范式的标准(3NF

    表内的每一个值只能被表达一次(列名不重复)

    表内的每一行都应当被唯一的标示(标识唯一性,如
    自动增长
    主键)

    表内不应该存储依赖于其他键的非键信息

    (5)加索引规则

    a.表建好后数据库自动为表生成一个索引(为
    自动增长的列生成唯一索引),如果在对这列添加索引,数据库会给一个警告,内容大概是,已经为这列添加了索引,建议修改索引名称和自动增长列名保持一致,为了方便使用。

    b.如果在添加索引时,建议索引名称和数据库列名保持一致,为了方便使用

    c.如果字段事实上是与其它表的关键字相关联而未设计为外键引用,需建索引。

    d.如果字段与其它表的字段相关联,需建索引。

    e.如果字段需做模糊查询之外的条件查询,需建索引

    f.除了主关键字允许建立簇索引外,其它字段所建索引必须为非簇索引。


    4.存储过程命名规范

    (1)
    存贮过程的命名请遵循以下命名规范:USP_ + 系统模块缩写(与表前缀类似)+_ + 功能标识 + 代表存贮过程操作的主要表名(不带前缀)或功能的英文单词或英文单词缩写。

    如果一个存贮过程只对一个表进行操作,建议存贮过程的名称就用存贮过程所操作的表的表名(不带前缀)。这样有利于根据表名找到相应的存贮过程。例如:

    用于新增的存贮过程USP_MESSAGE_Add_Model

    用于修改的存贮过程USP_ MESSAGE_Upt_Model

    用于删除的存贮过程USP_ MESSAGE_Del_ Modele

    注:USPuser stored procedure
    缩写

    5.存储过程设计规范

    在存贮过程中必须说明以下内容:

    (1)目的:说明此存贮过程的作用。

    (2)作者:首次创建此存贮过程的人的姓名。在此请使用中文全名,不允许使用英文简称。

    (3)创建日期:创建存贮过程时的日期。

    (4)修改记录:

    修改记录需包含修改顺序号、修改者、修改日期、修改原因,修改时不能直接在原来的代码上修改,也不能删除原来的代码,只能先将原来的代码注释掉,再重新增加正确的代码。修改顺序号的形式为:log1log2log3。。。,根据修改次数顺序增加,同时在注释掉的原来的代码块和新增的正确代码块前后注明修改顺序号。

    (5)对存贮过程各参数及变量的中文注解。

    建议:在数据库中创建一个文本文件保存创建脚本


    6.视图命名规范

    视图的命名请遵循以下命名规范:UV _ + 系统模块缩写(与表前缀类似)+_ + 功能标识 + 代表视图查询的主要表名(不带前缀)或功能的英文单词或英文单词缩写。

    如果一个视图只对一个表进行查询,建议视图的名称就用视图所查询的表的表名(不带前缀)。这样有利于根据表名找到相应的视图。

    注:UVuserView缩写

    7.视图设计规范

    在视图中必须说明以下内容:

    (1)目的:说明此视图的作用。

    (2)创建者:首次创建此视图的人的姓名。在此请使用中文全名,不允许使用英文简称。

    (3)修改者、修改日期、修改原因:如果有人对此视图进行了修改,则必须在此视图的前面加注修改者姓名、修改日期及修改原因。

    (4)对视图各参数及变量的中文注解

    建议:在数据库中创建一个文本文件保存创建脚本

    8.触发器命名规范

    Insert触发器加'_i'Delete触发器加'_d'Update触发器加'_u'

    9.触发器设计规范

    在视图中必须说明以下内容:

    (1)目的:说明此触发器的作用。

    (2)创建者:首次创建此触发器的人的姓名。在此请使用中文全名,不允许使用英文简称。

    (3)修改者、修改日期、修改原因:如果有人对此触发器进行了修改,则必须在此触发器的前面加注修改者姓名、修改日期及修改原因。

    (4)对触发器各参数及变量的中文注解

    建议:在数据库中创建一个文本文件保存创建脚本

    展开全文
  • 数据库表字段之间的关系设置

    千次阅读 2008-03-13 18:57:00
    如果要设置表1与2中相对应的字段之间的关系,先中的那个字段,只能是外键,只要不是与自身建立关系。这就像C++中的控件排列时会发生的情况一样:最后,如果是按第一行与第二行的间距也排列其他行之间的...

     在设置字段之间的关系时,有一点有趣的现象,这是在我有一个问题解决不了时发现的。

    如果要设置表1与表2中相对应的字段之间的关系,先中的那个表的字段,只能是外键,只要不是与表自身建立关系。这就像C++中的控件在排列时会发生的情况一样:最后,如果是按第一行与第二行的间距也排列其他行之间的间距,就要在最后点中的是第一行与第二行。即是有“后优先”的关系,在数据库中的字段之间的操作与此也有点相似。

    展开全文
  • 怎样查询数据库表字段的名称、类型、字段长度 SQL server版: 今天用的是SQL server,查询当前数据库下,一张的表名、字段名、字段类型、字段长度、 SELECT a.name,b.name,c.DATA_TYPE,b.max_length FROM sys....
  • mysql 查看数据库表字段信息

    千次阅读 2017-09-22 15:19:04
    查看 app 数据库的所有注释 查看 app 数据库下 test 的所有字段注释
  • PostgreSQL查询数据库表以及字段备注

    千次阅读 2019-04-09 11:46:57
    文章目录1、查询所有名称以及字段含义2、查看所有表名3、查看表名和备注4、 查看特定表名备注5、查看特定名字段 1、查询所有名称以及字段含义 select c.relname 表名,cast(obj_description(relfilenode,'pg_...
  • 数据库表字段的命名规范

    千次阅读 2012-04-17 21:10:21
    1.数据库表字段命名、设计规范 1.数据库表字段命名、设计规范 1.1数据库表数据库表的命名规范: 的前缀应该用系统或模块的英文名的缩写(全部大写或首字母大写)。如果系统功能简单,没有划分为模块,则...
  • mysql数据库如何设置字段长度

    千次阅读 2020-01-05 01:03:13
    mysql4.0版本之前,char和varchar后面的长度表示字节,utf-8编码格式下:三个字节存储一个汉字(包括汉字下的符号),一个字节存储一个英文字母,一个数字。 mysql5.0版本之后,char和varchar后面的长度表示一...
  • MySQL 数据库 字段操作

    千次阅读 2020-08-05 16:26:47
    数据库 字段操作
  • 数据库表时间字段日期修改

    千次阅读 2019-06-01 11:59:02
    面对大量的数据时间,通过工具一个一个修改,好吧,我rui了!!!!还好SQL语句有其强大之处。 一、修改中数据为当前...二、修改中时间字段年份加一 UPDATE 表名SET 时间字段= 时间字段+INTERVAL '1' YEAR ...
  • 数据库表属性字段

    千次阅读 2017-07-02 16:14:57
    SELECT (case when a.colorder=1 then d.name else null ...a.colorder 字段序号,a.name 字段名, (case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end) 标识,  (case when (SELECT count
  • 数据库右键 有一个对象信息,然后点进去里面有一个DDL,点击进去就可以看到数据库数据和数据库字段全部注解了!
  • 数据库表字段名命名规则

    千次阅读 2015-11-23 13:19:25
    数据库的表名和字段名应该由英文字母(区分大小写)和自然数字,加上下划线’_’组成。千万不要加空格或’.’或其他别的字符。否则可能会造成莫名其妙的字段找不到的错误。 qt的QSqlTableModel根本不认带空格的...
  • 数据库表字段时间自动更新

    万次阅读 2017-02-28 23:36:57
    假设我们有个需求,一个数据库表中,记录数据的创建时间,以及数据的更新时间,这个时候我们创建的需要带有自动更新的字段。 我们创建一个ceshi ,里面有四个字段 id name create_time update_time。 一...
  • 数据库表字段命名、设计规范

    千次阅读 2010-02-23 19:25:00
    数据库表字段命名、设计规范1.1数据库表数据库表的命名规范:的前缀应该用系统或模块的英文名的缩写(全部大写或首字母大写)。如果系统功能简单,没有划分为模块,则可以以系统英文名称的缩写作为前缀,否则以...
  • 实体类与数据库表字段不一致时

    万次阅读 2017-05-18 11:02:51
    实体类与数据库表字段不一致时,相应的注解@Transient特别强调:不是数据库表字段的属性必须加@Transient注解​(import javax.persistence.Transient;)@Column数据库表字段与result不一致时用@Column注解,例如...
  • ORACLE数据库调整表字段顺序

    千次阅读 2017-09-07 22:49:08
    本文主要介绍如何调整结构字段的顺序
  • 查看数据库表字段个数

    千次阅读 2018-05-08 10:13:07
    select count(*) from information_schema.COLUMNS where TABLE_SCHEMA='olympic2022' and table_name='infosys_server'此处'olympic2022'是自己的数据库名,'infosys_server'是自己的表名
  • 数据库表字段命名规范(一)

    万次阅读 多人点赞 2018-05-19 12:23:02
    如无备注,则中的第一个id字段一定是主键且为自动增长;2. 如无备注,则数值类型的字段请使用UNSIGNED属性;3. 如无备注,排序字段order_id程序中默认使用降序排列;4. 如无备注,所有字段设置NOT NULL,并...
  • WordPress数据库表字段详解

    千次阅读 2016-07-08 16:47:32
    今天熊哥朋友的博客看到关于wordpress数据库的介绍,感觉很有用,相信对同样使用wordpress的同学也很有用,所以就拿过来分享一下。希望对自己和大家有所帮助。 【废话】 记得刚接触网站时对数据库...
  • 1、向现有添加字段 alter table sch_schoolextinfo add (LASTYEARTHEQUALITY VARCHAR2(10)); alter table sch_schoolextinfo add (THEORYTRAINCOMNUM VARCHAR2(10));     2、添加注释   comment on ...
  • 数据库表字段命名的规范总结

    千次阅读 2019-05-09 15:45:12
    前面要求表名的长度要控制30个字符以内,此前提下,为了尽可能不影响的命名,前缀应该越短越好。我们建议前缀控制两个以内。具体前缀添加规则建议如下,括号内的单个大写字母表示要添加的前缀。 这...
  • 有一个oracle数据库表“CD_ZSZH_CREDIT_DATA“,结构如下:如何获取字段类型名称及长度呢?可以执行如下 SQL 语句:select column_name,data_type,DATA_LENGTH From all_tab_columns where table_name=upper('CD_...
  • 需求:给一个中的某一个int类型的字段设置为自动增长标识。 问题原因:设置一个字段的标识规范时,“是或否”的选项不能够设置,导致无法设置为自动增长的字段。 效果如下图: 查找原因是因为该字段设置了一...
  • 增加了一个字段,定义是基本类型有默认值,新生成的数据没问题但是历史数据该字段都是空值,导致程序会出错,JavaBean中的字段类型double和数据库中的空值不匹配,本来想get和set中做点文章,返回一个默认值,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,167,399
精华内容 466,959
关键字:

怎样在数据库表设置字段