>"So do not worry about tomorrow, for tomorrow will bring worries of its own. Today's trouble is enought for today." (MATTHEW 7:34) #ç¨Pythonæä½æ°æ®åºï¼1ï¼ å¨[ä¸ä¸è®²](./302.md)ä¸å·²ç»è¿æ¥äºæ°æ®åºãå°±æ°æ®åºèè¨ï¼è¿æ¥ä¹åå°±è¦å¯¹å ¶æä½ã使¯ï¼ç®åé£ä¸ªååå«åqiwsirtestçæ°æ®ä» ä» æ¯ç©ºæ¶åï¼æ²¡æä»ä¹å¯æä½çï¼è¦æä½å®ï¼å°±å¿ é¡»å¨éé¢å»ºç«â表âï¼ä»ä¹æ¯æ°æ®åºç表å¢ï¼ä¸é¢ææèªç»´åºç¾ç§å¯¹æ°æ®åºè¡¨çç®è¦è§£éï¼è¦æ³è¯¦ç»äºè§£ï¼éè¦çå®å¨æ¾ä¸äºæå ³æ°æ®åºçæç¨åä¹¦ç±æ¥ççã >å¨å ³ç³»æ°æ®åºä¸ï¼**æ°æ®åºè¡¨**æ¯ä¸ç³»åäºç»´æ°ç»çéåï¼ç¨æ¥ä»£è¡¨åå¨åæ°æ®å¯¹è±¡ä¹é´çå ³ç³»ãå®ç±çºµåçå忍ªåçè¡ç»æï¼ä¾å¦ä¸ä¸ªæå ³ä½è ä¿¡æ¯çå为 authors ç表ä¸ï¼æ¯ä¸ªåå å«çæ¯ææä½è çæä¸ªç¹å®ç±»åçä¿¡æ¯ï¼æ¯å¦âå§æ°âï¼èæ¯è¡åå å«äºæä¸ªç¹å®ä½è çææä¿¡æ¯ï¼å§ãåãä½åççã >对äºç¹å®çæ°æ®åºè¡¨ï¼åçæ°ç®ä¸è¬äºå åºå®ï¼ååä¹é´å¯ä»¥ç±å忥è¯å«ãèè¡çæ°ç®å¯ä»¥éæ¶ã卿ååï¼æ¯è¡é常é½å¯ä»¥æ ¹æ®æä¸ªï¼ææå 个ï¼åä¸çæ°æ®æ¥è¯å«ï¼ç§°ä¸ºåéé®ã ææç®å¨qiwsirtestä¸å»ºç«ä¸ä¸ªåå¨ç¨æ·åãç¨æ·å¯ç ãç¨æ·é®ç®±ç表ï¼å ¶ç»æç¨äºç»´è¡¨æ ¼è¡¨ç°å¦ä¸ï¼ |username|password|email| |--------|--------|-----| |qiwsir|123123|[email protected]| ç¹å«è¯´æï¼è¿é为äºç®åç»èï¼çªåºéç¹ï¼å¯¹å¯ç ä¸å å¯ï¼ç´æ¥ææä¿åï¼è½ç¶è¿ç§æ¹å¼æ¯å¾ä¸å®å ¨çã使¯ï¼æä¸å°ç½ç«è¿é½è¿ä¹åçï¼è¿ä¹åçç®çæ¯æ¯è¾å¯æ¶çã就让æå¨è¿éï¼ä» ä» å¨è¿é坿¶ä¸æ¬¡ã ##å»ºæ°æ®åºè¡¨å¹¶æå ¥æ°æ® 为äºå¨æ°æ®åºä¸å»ºç«è¿ä¸ªè¡¨ï¼éè¦è¿å ¥å°`mysql>`äº¤äºæ¨¡å¼ä¸æä½ãéçå¨äºï¼å¦æqiwsirtestè¿ä¸ªå±åé颿²¡æç±»ä¼¼å®¶å ·çåç§æ°æ®åºè¡¨ï¼å³ä½¿è¿äºå±å乿²¡æä»ä¹å¥½æä½çä¸è¥¿ï¼å æ¤éè¦å å°`mysql>`模å¼ä¸å¨å±åéé¢æå®¶å ·ã è¿å ¥æ°æ®åºäº¤äºæ¨¡å¼ï¼ qw@qw-Latitude-E4300:~$ mysql -u root -p Enter password: è°ç¨å·²ç»å»ºç«çæ°æ®åºï¼qiwsirtest mysql> use qiwsirtest; Database changed mysql> show tables; Empty set (0.00 sec) ç¨`show tables`å½ä»¤æ¾ç¤ºè¿ä¸ªæ°æ®åºä¸æ¯å¦ææ°æ®è¡¨äºãæ¥è¯¢ç»ææ¾ç¤ºä¸ºç©ºã ä¸é¢å°±ç¨å¦ä¸å½ä»¤å»ºç«ä¸ä¸ªæ°æ®è¡¨ï¼è¿ä¸ªæ°æ®è¡¨çå 容就æ¯ä¸é¢æè¯´æçã mysql> create table users(id int(2) not null primary key auto_increment,username varchar(40),password text,email text)default charset=utf8; Query OK, 0 rows affected (0.12 sec) 建ç«çè¿ä¸ªæ°æ®è¡¨åç§°æ¯ï¼usersï¼å ¶ä¸å å«ä¸è¿°å段ï¼å¯ä»¥ç¨ä¸é¢çæ¹å¼çä¸çè¿ä¸ªæ°æ®è¡¨çç»æã mysql> show tables; +----------------------+ | Tables_in_qiwsirtest | +----------------------+ | users | +----------------------+ 1 row in set (0.00 sec) æ¥è¯¢æ¾ç¤ºï¼å¨qiwsirtestè¿ä¸ªæ°æ®åºä¸ï¼å·²ç»æä¸ä¸ªè¡¨ï¼å®çå忝ï¼usersã mysql> desc users; +----------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+----------------+ | id | int(2) | NO | PRI | NULL | auto_increment | | username | varchar(40) | YES | | NULL | | | password | text | YES | | NULL | | | email | text | YES | | NULL | | +----------+-------------+------+-----+---------+----------------+ 4 rows in set (0.00 sec) æ¾ç¤ºè¡¨usersçç»æï¼ - idï¼æ¯å¢å ä¸ä¸ªç¨æ·ï¼idå·èªå¨å¢å ä¸ä¸ªã - usernameï¼åå¨ç¨æ·åï¼ç±»åæ¯varchar(40) - passwordï¼åå¨ç¨æ·å¯ç ï¼ç±»åæ¯text - emailï¼åå¨ç¨æ·çé®ç®±ï¼ç±»åæ¯text ç¹å«æéï¼å¨è¿éï¼ææ²¡æå¯¹æ¯ä¸ªåæ®µåæ³¨å ¥ä¸å¾ä¸ºç©ºç设置ï¼å¨çæ£çå¼åä¸ï¼æè®¸å¿ 须让usernameåpasswordä¸å¾ä¸ºç©ºã è¿ä¸ªç»æåä¸é¢æææçç»ææ¯ä¸æ ·çï¼åªä¸è¿è¿ä¸ªè¡¨ä¸è¿æ²¡æä»»ä½æ°æ®ï¼æ¯ä¸ä¸ªç©ºè¡¨ãå¯ä»¥æ¥è¯¢ä¸ä¸ççï¼ mysql> select * from users; Empty set (0.01 sec) ç®å表æ¯ç©ºçï¼ä¸ºäºè½å¤å¨åé¢ç¨pythonæä½è¿ä¸ªæ°æ®è¡¨ï¼éè¦åéé¢æå ¥ç¹ä¿¡æ¯ï¼å°±åªæå ¥ä¸æ¡å§ã mysql> insert into users(username,password,email) values("qiwsir","123123","[email protected]"); Query OK, 1 row affected (0.05 sec) mysql> select * from users; +----+----------+----------+------------------+ | id | username | password | email | +----+----------+----------+------------------+ | 1 | qiwsir | 123123 | [email protected] | +----+----------+----------+------------------+ 1 row in set (0.00 sec) å°ç®å为æ¢ï¼å¨`mysql>`ä¸çå·¥ä½å·²ç»å®æäºï¼æ¥ä¸æ¥å°±æ¯ç¨pythonæä½äºã ##pythonæä½æ°æ®åº è¦å¯¹æ°æ®åºè¿è¡æä½ï¼éè¦å è¿æ¥å®ãä¸ä¸è®²çå®è¿æ¥è¿äºï¼ä½æ¯ï¼éåä½ å ³éäºpythonçäº¤äºæ¨¡å¼ï¼æä»¥è¿è¦ä»æ°è¿æ¥ãè¿ä¹æ¯äº¤äºæ¨¡å¼ç缺ç¹ãä¸è¿å¨è¿éæä½ç´è§ï¼æä»¥æä¸å¿åä¸ä¸ï¼åé¢å°±ä¼è®²è§£å¦ä½å¨ç¨åºä¸èªå¨å®æäºã >>> import MySQLdb >>> conn = MySQLdb.connect(host="localhost",user="root",passwd="123123",db="qiwsirtest",charset="utf8") å®æè¿æ¥çè¿ç¨ï¼å ¶å®æ¯å»ºç«äºä¸ä¸ª`MySQLdb.connect()`çå®ä¾å¯¹è±¡connï¼é£ä¹è¿ä¸ªå¯¹è±¡æåªäºå±æ§å¢ï¼ - commit():å¦ææ°æ®åºè¡¨è¿è¡äºä¿®æ¹ï¼æäº¤ä¿åå½åçæ°æ®ãå½ç¶ï¼å¦ææ¤ç¨æ·æ²¡ææéå°±ä½ç½¢äºï¼ä»ä¹ä¹ä¸ä¼åçã - rollback():妿ææéï¼å°±åæ¶å½åçæä½ï¼å¦åæ¥éã - cursor([cursorclass]):æ¸¸æ æéãä¸é¢è¯¦è§£ã è¿æ¥æåä¹åï¼å¼å§æä½ã注æï¼MySQLdbç¨æ¸¸æ ï¼æéï¼cursorçæ¹å¼æä½æ°æ®åºï¼å°±æ¯è¿æ ·ï¼ >>> cur = conn.cursor() å 该模ååºå±å ¶å®æ¯è°ç¨CAPIçï¼æä»¥ï¼éè¦å å¾å°å½åæåæ°æ®åºçæéãè¿ä¹å°±æéæä»¬ï¼å¨æä½æ°æ®åºçæ¶åï¼æéä¼ç§»å¨ï¼å¦æç§»å¨å°æ°æ®åºæå䏿¡äºï¼åæ¥ï¼å°±æ¥ä¸åºä»ä¹æ¥äºãçåé¢çä¾åå°±æç½äºã ä¸é¢ç¨cursor()æä¾çæ¹æ³æ¥è¿è¡æä½ï¼æ¹æ³ä¸»è¦æ¯: 1. æ§è¡å½ä»¤ 2. æ¥æ¶ç»æ ###cursoræ§è¡å½ä»¤çæ¹æ³: - execute(query, args):æ§è¡åæ¡sqlè¯å¥ãquery为sqlè¯å¥æ¬èº«ï¼argsä¸ºåæ°å¼çåè¡¨ãæ§è¡åè¿åå¼ä¸ºåå½±åçè¡æ°ã - executemany(query, args):æ§è¡åæ¡sqlè¯å¥,使¯é夿§è¡åæ°å表éçåæ°,è¿åå¼ä¸ºåå½±åçè¡æ° ä¾å¦ï¼è¦å¨æ°æ®è¡¨usersä¸æå ¥ä¸æ¡è®°å½ï¼ä½¿å¾:username="python",password="123456",email="[email protected]"ï¼è¿æ ·åï¼ >>> cur.execute("insert into users (username,password,email) values (%s,%s,%s)",("python","123456","[email protected]")) 1L æ²¡ææ¥éï¼å¹¶ä¸è¿åä¸ä¸ª"1L"ç»æï¼è¯´ææä¸è¡è®°å½æä½æåãä¸å¦¨ç¨"mysql>"äº¤äºæ¹å¼æ¥çä¸ä¸ï¼ mysql> select * from users; +----+----------+----------+------------------+ | id | username | password | email | +----+----------+----------+------------------+ | 1 | qiwsir | 123123 | [email protected] | +----+----------+----------+------------------+ 1 row in set (0.00 sec) å¦ï¼å¥æªåãæä¹æ²¡æçå°å¢å çé£ä¸æ¡å¢ï¼åªééäºï¼å¯æ¯ä¸é¢ä¹æ²¡ææ¥éåã å¨è¿éï¼ç¹å«è¯·åä½ç宿³¨æï¼éè¿"cur.execute()"å¯¹æ°æ®åºè¿è¡æä½ä¹åï¼æ²¡ææ¥éï¼å®å ¨æ£ç¡®ï¼ä½æ¯ä¸çäºæ°æ®å°±å·²ç»æäº¤å°æ°æ®åºä¸äºï¼è¿å¿ é¡»è¦ç¨å°"MySQLdb.connect"çä¸ä¸ªå±æ§ï¼commit()ï¼å°æ°æ®æäº¤ä¸å»ï¼ä¹å°±æ¯è¿è¡äº"cur.execute()"æä½ï¼è¦å°æ°æ®æäº¤ï¼å¿ é¡»æ§è¡ï¼ >>> conn.commit() å¨å°"mysql>"ä¸è¿è¡"select * from users"è¯ä¸è¯ï¼ mysql> select * from users; +----+----------+----------+------------------+ | id | username | password | email | +----+----------+----------+------------------+ | 1 | qiwsir | 123123 | [email protected] | | 2 | python | 123456 | [email protected] | +----+----------+----------+------------------+ 2 rows in set (0.00 sec) goodï¼very goodãæç¶å¦æ¤ãè¿å°±å¦åç¼åä¸ä¸ªææ¬ä¸æ ·ï¼å°æååå°ææ¬ä¸ï¼å¹¶ä¸çäºæåå·²ç»ä¿çå¨ææ¬æä»¶ä¸äºï¼å¿ é¡»æ§è¡"CTRL-S"æè½ä¿åãä¹å°±æ¯å¨éè¿pythonæä½æ°æ®åºçæ¶åï¼ä»¥"execute()"æ§è¡åç§sqlè¯å¥ä¹åï¼è¦è®©å·²ç»æ§è¡çææä¿åï¼å¿ é¡»è¿è¡"commit()"ï¼è¿è¦æéï¼è¿ä¸ªå±æ§æ¯"MySQLdb.connect()"å®ä¾çã åå°è¯ä¸ä¸æå ¥å¤æ¡çé£ä¸ªå½ä»¤"executemany(query,args)". >>> cur.executemany("insert into users (username,password,email) values (%s,%s,%s)",(("google","111222","[email protected]"),("facebook","222333","[email protected]"),("github","333444","[email protected]"),("docker","444555","[email protected]"))) 4L >>> conn.commit() å°"mysql>"éé¢çç»æï¼ mysql> select * from users; +----+----------+----------+------------------+ | id | username | password | email | +----+----------+----------+------------------+ | 1 | qiwsir | 123123 | [email protected] | | 2 | python | 123456 | [email protected] | | 3 | google | 111222 | [email protected] | | 4 | facebook | 222333 | [email protected] | | 5 | github | 333444 | [email protected] | | 6 | docker | 444555 | [email protected] | +----+----------+----------+------------------+ 6 rows in set (0.00 sec) æåæå ¥äºå¤æ¡è®°å½ãç¹å«è¯·å使³¨æçæ¯ï¼å¨"executemany(query,args)"ä¸ï¼queryè¿æ¯ä¸æ¡sqlè¯å¥ï¼ä½æ¯argsè¿æ¶åæ¯ä¸ä¸ªtupleï¼è¿ä¸ªtupleéé¢çå ç´ ä¹æ¯tupleï¼æ¯ä¸ªtupleåå«å¯¹åºsqlè¯å¥ä¸çåæ®µå表ãè¿å¥è¯å ¶å®è¢«æ§è¡å¤æ¬¡ãåªä¸è¿æ§è¡è¿ç¨ä¸æ¾ç¤ºç»æä»¬çç½¢äºã å·²ç»ä¼æå ¥äºï¼ç¶åå°±å¯ä»¥ææ´å¤å¨ä½ãä¸çä¸ä¸è®²å§ã