#ç¨Pythonæä½æ°æ®åºï¼3ï¼ éè¿pythonæä½æ°æ®åºçè¡ä¸ºï¼é¤äºè½å¤å®æåé¢ä¸¤è®²ä¸çæä½ä¹å¤ï¼å½ç¶ï¼é£æ¯æ¯è¾å¸¸ç¨çï¼ï¼å ¶å®ä»»ä½å¯¹æ°æ®åºè¿è¡çæä½ï¼é½è½å¤éè¿python-mysqldbæ¥å®ç°ã ##å»ºç«æ°æ®åº å¨[ãç¨pythonæä½æ°æ®åºï¼1ï¼ã](./303.md)ä¸ï¼ææ¯éè¿`mysql>`åSQLè¯å¥ï¼å»ºç«äºä¸ä¸ªååå«åqiwsirtestçæ°æ®åºï¼ç¶åç¨ä¸é¢çæ¹å¼è·è¿ä¸ªæ°æ®åºè¿æ¥ >>> import MySQLdb >>> conn = MySQLdb.connect(host="localhost",user="root",passwd="123123",db="qiwsirtest",charset="utf8") å¨ä¸é¢çè¿æ¥ä¸ï¼åæ°`db="qiwsirtest"`å ¶å®å¯ä»¥çç¥ï¼å¦æçç¥ï¼å°±æ¯æ²¡æè·ä»»ä½å ·ä½çæ°æ®åºè¿æ¥ï¼åªæ¯è¿æ¥äºmysqlã >>> import MySQLdb >>> conn = MySQLdb.connect("localhost","root","123123",port=3306,charset="utf8") è¿ç§è¿æ¥æ²¡ææå®å ·ä½æ°æ®åºï¼æ¥ä¸æ¥å°±å¯ä»¥ç¨ç±»ä¼¼`mysql>`äº¤äºæ¨¡å¼ä¸çæ¹å¼è¿è¡æä½ã >>> conn.select_db("qiwsirtest") >>> cur = conn.cursor() >>> cur.execute("select * from users") 7L >>> cur.fetchall() ((1L, u'qiwsir', u'123123', u'[email protected]'), (2L, u'mypython', u'123456', u'[email protected]'), (3L, u'google', u'111222', u'[email protected]'), (4L, u'facebook', u'222333', u'[email protected]'), (5L, u'github', u'333444', u'[email protected]'), (6L, u'docker', u'444555', u'[email protected]'), (7L, u'\u8001\u9f50', u'9988', u'[email protected]')) ç¨`conn.select_db()`éæ©è¦æä½çæ°æ®åºï¼ç¶åéè¿æéå°±å¯ä»¥æä½è¿ä¸ªæ°æ®åºäºãå ¶å®çæä½è·åä¸¤è®²ä¸æ ·äºã 妿ä¸éæ°æ®åºï¼èæ¯è¦æ°å»ºä¸ä¸ªæ°æ®åºï¼å¦ä½æä½ï¼ >>> cur = conn.cursor() >>> cur.execute("create database newtest") 1L å»ºç«æ°æ®åºä¹åï¼å°±å¯ä»¥éæ©è¿ä¸ªæ°æ®åºï¼ç¶åå¨è¿ä¸ªæ°æ®åºä¸å»ºç«ä¸ä¸ªæ°æ®è¡¨ã >>> cur.execute("create table newusers (id int(2) primary key auto_increment, username varchar(20), age int(2), email text)") 0L æ¬å·é颿¯å¼å·ï¼å¼å·éé¢å°±æ¯åå»ºæ°æ®è¡¨çè¯å¥ï¼çå®ä¸å®æ¯çæçãè¿æ ·å°±å¨newtestè¿ä¸ªæ°æ®åºä¸å建äºä¸ä¸ªå为newusersç表 >>> cur.execute("show tables") 1L >>> cur.fetchall() ((u'newusers',),) è¿æ¯æ¥çè¡¨çæ¹å¼ãå½ç¶ï¼çå®å¯ä»¥å¨`mysql>`äº¤äºæ¨¡å¼ä¸æ¥çæ¯ä¸æ¯åå¨è¿ä¸ªè¡¨ãå¦ä¸ï¼ mysql> use newtest; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> show tables; +-------------------+ | Tables_in_newtest | +-------------------+ | newusers | +-------------------+ 1 row in set (0.00 sec) mysql> desc newusers; +----------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+----------------+ | id | int(2) | NO | PRI | NULL | auto_increment | | username | varchar(20) | YES | | NULL | | | age | int(2) | YES | | NULL | | | email | text | YES | | NULL | | +----------+-------------+------+-----+---------+----------------+ 4 rows in set (0.00 sec) 以ä¸å°±éè¿python-mysqldbå®ç°äºå¯¹æ°æ®åºå表ç建ç«ã å½ç¶ï¼è½å»ºå°±è½å é¤ãçå®å¯ä»¥èªè¡å°è¯ï¼å¨è¿éå°±ä¸èµè¿°ï¼åçå°±æ¯å¨`cur.execute()`ä¸åSQLè¯å¥ã ##å ³éä¸å å½è¿è¡å®æå ³æ°æ®æä½ä¹åï¼æåè¦åçå°±æ¯å ³é游æ ï¼æéï¼åè¿æ¥ãç¨å¦ä¸å½ä»¤å®ç°ï¼ >>> cur.close() >>> conn.close() 注æå ³é顺åºï¼åæå¼ç顺åºç¸åã 为ä»ä¹è¦å ³éï¼è¿ä¸ªé®é¢æç¹é£ä¸ªäºãä½ ææ¿åéé¢é½æ¶æ¾å¥½äºï¼å¦æç¦»å¼æ¿åï¼ä¸å ³é¨åï¼ä¸è¦ä»¥ä¸ºèªå·±çæ´»å¨é£ä¸ªçæ³ç¤¾ä¼ãæ æ¬²éèé£ä¸æ¢ï¼å°å·å¨è¡å¨ãæ´ä½åµï¼å¦æä¸å ³éï¼æå¡å¨çå 容æ»å¡çé£äºä¸è¥¿è没æéæ¾ï¼æ©æå°±æ»¡äºãæä»¥ï¼å¿ é¡»å ³éãå¿ é¡»çã ##å ³äºä¹±ç é®é¢ è¿ä¸ªé®é¢æ¯ç¼åwebæ¶å¸¸å¸¸å°æ°ç¨åºåçé®é¢ï¼ä¹±ç çæ¬è´¨æ¥èªäºç¼ç æ ¼å¼ç设置混乱ãæä»¥ï¼è¦ç¹å«æéè¯¸ä½æ³¨æãå¨ç¨python-mysqldbçæ¶åï¼ä¸ºäºæ¾ç½®ä¹±ç ï¼å¯ä»¥åå¦ä¸ç»ä¸è®¾ç½®ï¼ 1. Pythonæä»¶è®¾ç½®ç¼ç utf-8ï¼æä»¶åé¢å ä¸ #encoding=utf-8) 2. MySQLæ°æ®åºcharset=utf8ï¼æ°æ®åºçè®¾ç½®æ¹æ³ï¼å¯ä»¥ç½ä¸æç´¢ï¼ 3. Pythonè¿æ¥MySQLæ¯å ä¸åæ° charset=utf8ï¼å¨å颿ç¨ä¸é½è¿ä¹æ¼ç¤ºäºï¼å¾éè¦ï¼ 4. 设置Pythonçé»è®¤ç¼ç 为 utf-8 (sys.setdefaultencoding(utf-8)ï¼è¿ä¸ªåé¢ä¼è®²è¿°ï¼ 代ç 示ä¾ï¼ #encoding=utf-8 import sys import MySQLdb reload(sys) sys.setdefaultencoding('utf-8') db=MySQLdb.connect(user='root',charset='utf8') MySQLçé ç½®æä»¶è®¾ç½®ä¹å¿ é¡»é ç½®æutf8 设置 MySQL ç my.cnf æä»¶ï¼å¨ [client]/[mysqld]é¨åé½è®¾ç½®é»è®¤çå符éï¼é常å¨/etc/mysql/my.cnf)ï¼ [client] default-character-set = utf8 [mysqld] default-character-set = utf8 windowsæä½ç³»ç»è¯·çå®èªå·±googleã