专栏首页python前行者Python操作MySQL数据库

Python操作MySQL数据库

在MYSQL中,运行INSERT INTO 插入语句中的字段是否一定要把该表的字段全部填上?

例如表tab_name有(col1,col2,col3,col4)4个字段。 只填你需要添的,就要把列名写上values后对应列值, 语法:insert into tab_name (col1,col2,col3) values(val1,val2,val3);

如果你想省略列名,那就要把所有字段的值都填上了, 语法:insert into tab_name values(val1,val2,val3,val4);


MySQL数据库,插入重复数据

sql = "INSERT  INTO test_c(id,name,sex)values(%s,%s,%s)"  
param = (1,'AJ','MAN')  
n = cursor.execute(sql,param)  
db.commit() 

当我们使用普通的 “INSERT INTO” 插入数据,如果数据有重复就会有报错: 提示的是键值重复

Traceback (most recent call last):  
  File "D:/python/tongbu_py/test.py", line 14, in <module>  
    n = cursor.execute(sql,param)  
  File "D:\Python27\lib\site-packages\MySQLdb\cursors.py", line 174, in execute  
    self.errorhandler(self, exc, value)  
  File "D:\Python27\lib\site-packages\MySQLdb\connections.py", line 36, in defaulterrorhandler  
    raise errorclass, errorvalue  
_mysql_exceptions.IntegrityError: (1062, "Duplicate entry '1-AJ-MAN' for key 'PRIMARY'")  

我们可以使用另外2个传入方法: ”INSERT IGNORE INTO 和 REPLACE INTO“

INSERT IGNORE会忽略数据库中已经存在的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据。这样就可以保留数据库中已经存在数据,达到在间隙中插入数据的目的

REPLACE INTO 如果存在primary 或 unique相同的记录,则先删除掉。再插入新记录。


MySQL 创建数据表

创建MySQL数据表需要以下信息:

  • 表名
  • 表字段名
  • 定义每个表字段

语法

以下为创建MySQL数据表的SQL通用语法:

CREATE TABLE table_name (column_name column_type);

以下例子中我们将在 RUNOOB 数据库中创建数据表runoob_tbl:

CREATE TABLE IF NOT EXISTS `runoob_tbl`(
   `runoob_id` INT UNSIGNED AUTO_INCREMENT,
   `runoob_title` VARCHAR(100) NOT NULL,
   `runoob_author` VARCHAR(40) NOT NULL,
   `submission_date` DATE,
   PRIMARY KEY ( `runoob_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

实例解析:

如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL ,就会报错。

AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。

PRIMARY KEY关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号分隔。

ENGINE 设置存储引擎,CHARSET 设置编码。

通过命令提示符创建表

通过 mysql> 命令窗口可以很简单的创建MySQL数据表。你可以使用 SQL 语句 CREATE TABLE 来创建数据表。

实例

以下为创建数据表 runoob_tbl 实例:

root@host# mysql -u root -p
Enter password:*******
mysql> use RUNOOB;
Database changed
mysql> CREATE TABLE runoob_tbl(
   -> runoob_id INT NOT NULL AUTO_INCREMENT,
   -> runoob_title VARCHAR(100) NOT NULL,
   -> runoob_author VARCHAR(40) NOT NULL,
   -> submission_date DATE,
   -> PRIMARY KEY ( runoob_id )
   -> )ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.16 sec)
mysql>

注意:MySQL命令终止符为分号 (;) 。

创建 MySql 的表时,表名和字段名外面的符号 ` 不是单引号,而是英文输入法状态下的反单引号,也就是键盘左上角 esc 按键下面的那一个 ~ 按键,坑惨了。 反引号是为了区分 MySql 关键字与普通字符而引入的符号,一般的,表名与字段名都使用反引号。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • centos7 .*tar包安装 MySQL5.7

    周小董
  • [884]Elasticsearch可视化工具

    用途:展示ES(集群)数据信息 视图:https://mobz.github.io/elasticsearch-head/ 下载:https://githu...

    周小董
  • [905]MySQL的sql_mode解析与设置和MySQLdb._exceptions.OperationalError: (1055, “Expression

    重启mysql:/etc/init.d/mysql restart 登录mysql:mysql -u root -p mysql ->select @@sq...

    周小董
  • 点云蒙特卡罗卷积网络Monte Carlo Convolution

    标题:Monte Carlo Convolution for Learning on Non-Uniformly Sampled Point Clouds

    点云乐课堂
  • [深度学习工具]·python音频常用的操作

    链接:http://www.cnblogs.com/xingshansi/p/6799994.html

    小宋是呢
  • HDUOJ------------1051Wooden Sticks

    Wooden Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/3276...

    Gxjun
  • 资源 | 谷歌与MIT联袂巨著:《计算机科学的数学》开放下载

    选自CSAIL.Mit 机器之心编译 参与:蒋思源、吴攀 谷歌和麻省理工学院联袂出品的《计算机科学的数学》昨日已经开放下载了,读者可点击文末「阅读原文」下载。...

    机器之心
  • 用纵向健康数据来分析患者的相似度(CS LG)

    长期以来,医疗保健专业人员一直希望利用计算机强大的处理能力来发现电子健康记录中隐藏的新事实和医学知识。庞大的医疗档案中包含了时间流信息,包括病人的就诊记录、检查...

    奥斯特洛夫斯萌
  • 通过视觉匹配的适应性文本识别

    在本篇论文中,我们的目标是解决文档中的文本识别泛化与灵活性的问题。我们引入了一个利用语言中字符的重复性模型,并且分离了视觉化习得与语言模型阶段。通过这样的方法,...

    用户7724216
  • Monkey's Audio vs. WavPack vs. FLAC By HKL,

    For a long time I’ve been thinking about getting a HTPC running Windows Media Ce...

    hiplon

扫码关注云+社区

领取腾讯云代金券