Python操作MySQL数据库

2019-03-25 14:50:27 浏览数 (1)

在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数据库,插入重复数据

代码语言:javascript复制
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” 插入数据,如果数据有重复就会有报错: 提示的是键值重复

代码语言:javascript复制
Traceback (most recent call last):  
  File "D:/python/tongbu_py/test.py", line 14, in <module>  
    n = cursor.execute(sql,param)  
  File "D:Python27libsite-packagesMySQLdbcursors.py", line 174, in execute  
    self.errorhandler(self, exc, value)  
  File "D:Python27libsite-packagesMySQLdbconnections.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通用语法:

代码语言:javascript复制
CREATE TABLE table_name (column_name column_type);

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

代码语言:javascript复制
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 实例:

代码语言:javascript复制
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 人点赞