一. 创建表
#/usr/bin/python
#-*- coding:utf-8 -*-
#@Time :2017/11/22 18:05
#@Auther :liuzhenchuan
#@File :创建表.py
import MySQLdb
def connect_mysql():
db_config={
'host':'192.168.16.70',
'port':3306,
'user':'root',
'passwd':'123123',
'db':'students',
'charset':'utf8'
}
try:
cnx = MySQLdb.connect (**db_config)
except Exception as e:
raise e
finally:
return cnx
student = '''
create table student(
stdid int primary key not null,
stdname varchar(100) not null,
gender enum('M','F'),
agent int
);
'''
course = '''
create table course(
couid int primary key not null,
cname varchar(100) not null,
tid int not null
);
'''
score = '''
create table score(
sid int primary key not null,
stdid int not null,
cid int not null,
grade int not null
);
'''
teacher = '''
create table teacher(
tid int primary key not null,
tname varchar(100) not null
);
'''
tmp = '''
set @a := 0;
create table tmp as select (@a := @a + 1) as id from information_schema.tables limit 10;
'''
if __name__ == '__main__':
cnx = connect_mysql()
print cnx
print dir(cnx)
cus = cnx.cursor()
try:
cus.execute(student)
cus.execute(course)
cus.execute(score)
cus.execute(teacher)
cus.execute(tmp)
cus.close()
cnx.commit()
except Exception as e:
raise e
finally:
cnx.close()
>>>
<_mysql.connection open to '192.168.16.70' at 32f5078>
['DataError', 'DatabaseError', 'Error', 'IntegrityError', 'InterfaceError', 'InternalError', 'NotSupportedError', 'OperationalError', 'ProgrammingError', 'Warning', '__class__', '__delattr__', '__dict__', '__doc__', '__enter__', '__exit__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_server_version', '_transactional', 'affected_rows', 'autocommit', 'begin', 'change_user', 'character_set_name', 'client_flag', 'close', 'commit', 'converter', 'cursor', 'cursorclass', 'default_cursor', 'dump_debug_info', 'encoders', 'errno', 'error', 'errorhandler', 'escape', 'escape_string', 'field_count', 'get_autocommit', 'get_character_set_info', 'get_host_info', 'get_proto_info', 'get_server_info', 'info', 'insert_id', 'kill', 'literal', 'messages', 'next_result', 'open', 'ping', 'port', 'query', 'rollback', 'select_db', 'server_capabilities', 'set_character_set', 'set_server_option', 'set_sql_mode', 'show_warnings', 'shutdown', 'sqlstate', 'stat', 'store_result', 'string_decoder', 'string_literal', 'thread_id', 'unicode_literal', 'use_result', 'warning_count']
解释说明:
没有任何异常,在数据库中查看表,出现这五个表。说明这五个表已经创建成功。
既然我们要搞,就尽可能的接近实战,我们来把数据搞大一点,语句设计的复杂一点,这样对我们以后接触到简单的sql语句时,就有很大的帮助。
首先我们先来了解一下information_schema这个库,这个在mysql安装时就有了,提供了访问数据库元数据的方式。那什么是元数据库呢?元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。有些时候用于表述该信息的其他术语包括“数据词典”和“系统目录”。
information_schema数据库表说明:
SCHEMATA表:提供了当前mysql实例中所有数据库的信息。是show databases的结果取之此表。
TABLES表:提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息。是show tables from schemaname的结果取之此表。
COLUMNS表:提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。是show columns from schemaname.tablename的结果取之此表。
STATISTICS表:提供了关于表索引的信息。是show index from schemaname.tablename的结果取之此表。
USER_PRIVILEGES(用户权限)表:给出了关于全程权限的信息。该信息源自mysql.user授权表。是非标准表。
SCHEMA_PRIVILEGES(方案权限)表:给出了关于方案(数据库)权限的信息。该信息来自mysql.db授权表。是非标准表。
TABLE_PRIVILEGES(表权限)表:给出了关于表权限的信息。该信息源自mysql.tables_priv授权表。是非标准表。
COLUMN_PRIVILEGES(列权限)表:给出了关于列权限的信息。该信息源自mysql.columns_priv授权表。是非标准表。
CHARACTER_SETS(字符集)表:提供了mysql实例可用字符集的信息。是SHOW CHARACTER SET结果集取之此表。
COLLATIONS表:提供了关于各字符集的对照信息。
COLLATION_CHARACTER_SET_APPLICABILITY表:指明了可用于校对的字符集。这些列等效于SHOW COLLATION的前两个显示字段。
TABLE_CONSTRAINTS表:描述了存在约束的表。以及表的约束类型。
KEY_COLUMN_USAGE表:描述了具有约束的键列。
ROUTINES表:提供了关于存储子程序(存储程序和函数)的信息。此时,ROUTINES表不包含自定义函数(UDF)。名为“mysql.proc name”的列指明了对应于INFORMATION_SCHEMA.ROUTINES表的mysql.proc表列。
VIEWS表:给出了关于数据库中的视图的信息。需要有show views权限,否则无法查看视图信息。
TRIGGERS表:提供了关于触发程序的信息。必须有super权限才能查看该表
而TABLES在安装好mysql的时候,一定是有数据的,因为在初始化mysql的时候,就需要创建系统表,该表一定有数据。
set @i := 0;
create table tmp as select (@i := @i + 1) as id from information_schema.tables limit 10;
mysql中变量不用事前申明,在用的时候直接用“@变量名”使用就可以了。set这个是mysql中设置变量的特殊用法,当@i需要在select中使用的时候,必须加:,这样就创建好了一个表tmp,查看tmp的数据:
mysql> select * from tmp;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
+------+
10 rows in set (0.00 sec)
我们只是从information_schema.tables表中取10条数据,任何表有10条数据也是可以的,然后把变量@i作为id列的值,分10次不断输出,依据最后select的结果,创建表tmp。
- python在sqlite动态创建表源码
代码之余,将开发过程中经常用的代码片段备份一下,如下的代码是关于python在sqlite动态创建表的代码,应该能对各位有所用. import sqlite3 as db conn = db.conn ...
- python基础 — 链接 Mysql 创建 数据库和创表
重点: 1. 链接服务器的数据库 2. 创建表和格式 3. 插入多行数据 import pymysql try: host='xxx' user='xxx' passwd='xxx' db='test ...
- SQL 基础语法(创建表空间、用户、并授予权限、数据的增删改查) --(学习笔记)[转]
--创建表空间 名:lyayzh_test create tablespace lyayzh_test --创建表数据文件 名:lyayzh_test_data.dbf 必须以dbf为后缀 dataf ...
- python 之 数据库(创建表的完整语法、基本数据类型)
10.4 创建表的完整语法 create table 表名( 字段名1 类型[(宽度) 约束条件], 字段名2 类型[(宽度) 约束条件], 字段名3 类型[(宽度) 约束条件] ); #类型:使用限 ...
- python pymysql连接数据库并创建表
之前看菜鸟教程 #!/usr/bin/python3 import pymysql # 打开数据库连接 db = pymysql.connect("localhost"," ...
- python基础之员工信息表作业
周末大礼包 文件存储格式如下: id, name, age, phone, job 1, Alex, 22, 13651054608, IT 2, Egon, 23, 13304320533, Tea ...
- Python基础===使用virtualenv创建一个新的运行环境
virtualenv简直是一个神器,以ubuntu环境为例, 先安装virtualenv 然后执行如下命令: 多版本创建env的方式: virtualenv 虚拟环境文件目录名 python=pyth ...
- python 基础 9.6 设计表结构
一. 设计表结构 在操作设计数据库之前,我们先要设计数据库表结构,我们就来分析分析经典的学生,课程,成绩,老师这几者他们之间的关系,我们先来分析各个主体他们直接有什么属性,并确定表结构,在实际开 ...
- Python基础-使用range创建数字列表以及简单的统计计算和列表解析
1.使用函数 range() numbers = list(range[1,6]) print (numbers) 结果: [1,2,3,4,5] 使用range函数,还可以指定步长,例如,打印1~1 ...
随机推荐
- Android录制视频报错setVideoSize called in a invalid state 1
录制视频时想获取手机支持的录制视频的分辨率,使用代码如下: List<Camera.Size> videoSize = camera.getParameters().getSupporte ...
- 关于在SSH2中使用ajax技术的总结(主要写Struts2和ajax)
以下内容是自己理解的,因为还没有看过相关的文章,所以,技术上还是有很大的欠缺.不过这也是自己努力思考得到的,如果有什么更好的建议可以回复我. 1. 任务需求: 实现一个包含数据的表格,并且有分页功能. ...
- as well as
一.as well 用法: 1.as well常用作状语,作“又:也”解,相当于too或also,常位于句末,无须用逗号与句子分开.如: I am going to London and my sis ...
- selenium执行报错:Process refused to die after 10 seconds, and couldn't taskkill it
十二月 02, 2015 5:16:56 下午 org.openqa.selenium.os.ProcessUtils killWinProcess 警告: Process refused to di ...
- div 事件透传
有些时候,我们会想要把一个 div 层覆盖在另一个 div 层上,要让下层的 div 响应鼠标事件而上层的不响应仅仅只做内容展示. 这种时候,我们就可以用到一个 CSS 属性:pointer-even ...
- EffectiveJava(2)应对多个构造函数应当使用构建器
** 应对多个构造函数应当使用构建器 ** 静态工厂和构造器都不能很好的扩展到大量的可选参数,遇到大量参数有大量可选域时,只能重复生成可选参数递增的构造方法,这种构造模式叫做重叠构造器模式 javaB ...
- 微信小程序 - 替换tabbar(采用固定定位形式)
简单示例(提供思路): wxml(作为模板形式插入到需要tabbar的地方去) <view class='tab-bar'> <view class="usermotto& ...
- php闭包使用例子
一.依据闭包实现一个容器 class Di { private $factory; public function set($id, $value) { $this->factory[$id] ...
- 微信小程序 之 请求函数封装
封装的request的代码 /** * @desc API请求接口类封装 */ /** * POST请求API * @param {String} url 接口地址 * @param {Object} ...
- Linux ssh修改文件
cd 你要修改的文件所在目录vi 你需要修改的文件名 这之后你就会进入vi编辑界面按"i"进入编辑模式正常修改就行按"ESC"进入命令模式,输入 ": ...