天天看點

28. Python 建表 增加資料 查詢資料

1.建表

資料庫鍵表,直接在python代碼中執行

結果:

mysql> show tables;

沒有任何異常,在資料庫中檢視表,出現這五個表。說明這五個表已經建立成功。

先來了解一下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的時候,就需要建立系統表,該表一定有資料。

例子裡mysql變量不用事前申明,在用的時候直接用“@變量名”使用就可以了。

set這個是mysql中設定變量的特殊用法,當 @i 需要在 select 中使用的時候,必須加 :(冒号),這樣就建立好了一個表tmp,

檢視tmp的資料:

mysql> select * from tmp;

從information_schema.tables表中取10條資料,任何表有10條資料也是可以的,然後把變量@i作為id列的值,分10次不斷輸出,依據最後select的結果,建立表tmp。

2.增加資料

mysql> select count(*) from Student;

mysql> select count(*) from Course;

mysql> select count(*) from Score;

mysql> select count(*) from Teacher;

在Student的表中增加了10000條資料,id是從10000開始的。

count函數時用來統計個數的。

解釋:

我們知道Student有四個字段,StdID,StdName,Gender,Age;

先來看這個select語句:

<a href="mailto:br/">現在有一個問題,為什麼會出現10000條資料呢,這10000條資料時怎麼生成的呢? 先來看個例子:</a>

<a href="mailto:br/">select * from tmp a, tmp b, tmp c; 最終是1000條資料,試試有一些感覺了呢,a, b, c都是tmp表的别名,相當于每個表都循環了一遍。是以最終的資料是有多少個表,就是10的多少次幂。</a>

<a href="mailto:br/">3.查資料 10000條資料,可能會有同學的名字是一樣的,我們的需求就是在資料庫中查出來所有名字有重複的同學的所有資訊,然後寫入到檔案中。</a>

<a href="mailto:br/">結果: 本地目錄出現一個select.txt檔案,内容如下: (19844L, u'315', u'F', 24) (17156L, u'315', u'F', 25) (14349L, u'48f', u'F', 25) (17007L, u'48f', u'F', 25) (12629L, u'afd', u'F', 25) (13329L, u'afd', u'F', 24) (10857L, u'e31', u'F', 23) (14476L, u'e31', u'M', 21) (16465L, u'ee5', u'M', 22) (18570L, u'ee5', u'M', 21) (17056L, u'ef0', u'M', 23) (16946L, u'ef0', u'F', 24)</a>

<a href="mailto:br/">解釋: 1.先來分析一下select查詢這個語句:</a>

<a href="mailto:br/">2.我們先來看括号裡面的語句:</a>

<a href="mailto:br/">這個是把所有學生名字重複的學生都列出來.</a>

<a href="mailto:br/">3.最外面select是套了一個子查詢,學生名字是在我們()裡面的查出來的學生名字,把這些學生的所有資訊都列出來。 4.result = cus.fetchall()列出結果以後,我們通過fetchall()函數把所有的内容都取出來,這個result是一個tuple 5.通過檔案寫入的方式,我們把取出來的result寫入到select.txt檔案中。得到最終的結果。</a>

本文轉自 聽丶飛鳥說 51CTO部落格,原文連結:http://blog.51cto.com/286577399/2043364