易燃物匯聚 YouTube 有聲書與書評
Python從小白到大牛 封面

Python從小白到大牛

關東昇

606人在讀
20.6萬字總字數
¥62.3定價

內容簡介

本書是一部系統論述 Python編程語言、 OOP編程思想以及函數式編程思想的立體化教程(含圖書、答疑服務、教學課件、源代碼及視頻教程)。全書共分爲四篇:第一篇 Python基礎(第 1章 ~第 8章),第二篇 Python進階(第 9章 ~第 15章),第三篇 Python高級實用庫與框架(第 16章 ~第 20章),第四篇項目實戰(第 21章 ~第 24章)。主要內容包括開篇綜述、搭建開發環境、第一個 Python程序、Python語法基礎、 Python編碼規範、數據類型、運算符、控制語句、數據結構、函數式編程、面向對象編程、異常處理、常用模塊、正則表達式、文件操作與管理、數據交換格式、數據庫編程、網絡編程、 wxPython圖形用戶界面編程、Python多線程編程、項目實戰 1 網絡爬蟲與爬取股票數據、項目實戰 2 數據可視化與股票數據分析、項目實戰 3 PetStore寵物商店項目、項目實戰 4 開發 Python版 QQ2006聊天工具。 爲便於讀者高效學習,快速掌握 Python編程方法,本書作者精心製作了完整的教學課件、完整的源代碼與豐富的配套視頻教程,並提供在線答疑服務。 海報:

讀者書評

★★★☆☆

第 24章項目實戰 4:開發 Python版 QQ2006聊天工具 【DS】ERROR 1366 (HY000): Incorrect string value: '\xB31' for column 'user_name' at row 1 我:啥意思? DS: 這個錯誤表明在向MySQL數據庫插入數據時,某個字符的編碼與列的字符集設置不兼容。以下是原因分析和解決方案: ### **錯誤原因** 1. **字符集不匹配** 列 `user_name` 的字符集(如 `latin1` 或舊版 `utf8`)無法識別 `\xB31` 對應的字符。 - `\xB3` 是十六進制字節,在 `latin1` 編碼中表示字符 `³`(上標三),但在 `utf8mb4` 中可能需要多字節編碼。 - 若實際字符超出列的字符集支持範圍,會觸發此錯誤。 2. **舊版 `utf8` 的限制** MySQL 的 `utf8` 僅支持最多 3 字節的字符(如基本多語言平面字符),而 `utf8mb4` 支持 4 字節字符(如表情符號、某些特殊符號)。 ### **解決方案** #### 1. **修改列的字符集爲 `utf8mb4`** ```sql ALTER TABLE 表名 MODIFY COLUMN user_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` #### 2. **檢查並統一字符集設置** - **查看當前字符集:** ```sql SHOW CREATE TABLE 表名; ``` 確認 `DEFAULT CHARSET` 是否爲 `utf8mb4`。 - **修改表或數據庫的默認字符集:** ```sql ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` #### 3. **配置連接字符集** 在客戶端連接時指定字符集(如使用 MySQL Connector): - **JDBC 連接示例:** ``` jdbc:mysql://localhost:3306/數據庫名?useUnicode=true&characterEncoding=utf8mb4 ``` - **命令行或配置文件:** ```ini [client] default-character-set = utf8mb4 ``` #### 4. **驗證數據合法性** 如果字符 `\xB31` 是用戶輸入或外部數據,檢查其是否符合預期編碼。可能需要轉義或過濾非法字符。 #### 5. **升級 MySQL 版本(可選)** 如果 MySQL < 5.5.3,需升級以支持 `utf8mb4`。 ### **操作後驗證** 插入數據測試: ```sql INSERT INTO 表名 (user_name) VALUES ('³1'); -- 假設原始字符是 ³1 ``` 若不再報錯,則修復成功。 ### **總結** 此錯誤本質是字符編碼衝突。通過統一使用 `utf8mb4` 並確保連接配置一致,可徹底解決問題。 【DS】 我: mysql> select * from users; -> -> -> -> -> MySQL的這些箭頭是什麼意思? DS: 在MySQL命令行客戶端中,箭頭 `->` 表示客戶端正在等待你輸入更多的內容,因爲當前語句尚未被正確終止。出現這種情況的常見原因和解決方法如下: ### **原因分析** 1. **語句未正確結束**: - 如果語句末尾沒有以分號 `;`(半角符號)結束,MySQL會認爲語句未完成,繼續等待輸入。 - **特別注意**:即使你輸入了分號,但如果是全角分號(如中文輸入法的`;`)或分號後有多餘字符(如空格、換行符),MySQL仍無法識別。 2. **未閉合的引號或括號**: - 如果語句中存在未閉合的引號(如 `'`)、括號(如 `(`),MySQL會持續等待閉合符號,直到輸入爲止。 ### **解決步驟** 1. **檢查分號是否正確**: - 確保分號 `;` 是半角符號(英文輸入法下的分號),且是當前行的最後一個字符。 - **錯誤示例**:`select * from users;`(全角分號)或 `select * from users; `(分號後帶空格)。 2. **補充分號結束語句**: - 如果已經看到 `->` 提示符,直接輸入 `;` 並按回車即可結束語句。 ```sql mysql> select * from users -> ; -- 輸入分號後,語句立即執行 ``` 3. **檢查引號或括號是否閉合**: - 如果語句中包含字符串或括號,確保它們成對出現。例如: ```sql mysql> select * from users where name = 'Alice -> '; -- 第一行未閉合的引號,需要在第二行補全 ``` ### **示例演示** - **正常情況**(正確使用分號): ```sql mysql> select * from users; -- 直接執行,顯示結果 ``` - **異常情況**(未閉合引號): ```sql mysql> select * from users where name = 'Alice -> '; -- 補全引號後,語句執行 ``` ### **其他提示** - **退出等待狀態**: - 如果誤輸入導致一直顯示 `->`,可按 `Ctrl+C` 取消當前輸入,重新開始。 - **配置提示符**: - MySQL的提示符可以通過 `prompt` 命令自定義,但默認行爲是 `->` 表示等待輸入。 **總結**:箭頭 `->` 是MySQL等待你完成輸入的信號,檢查語句是否以半角分號正確結束,或是否存在未閉合的符號即可解決。 我:都不是上面的情況哎~ DS: 如果你的情況不屬於分號缺失或符號未閉合,可能是以下 **特殊場景** 導致的問題。請逐項排查: ### **1. 多行語句未完整輸入** MySQL 允許將一條語句拆分成多行輸入,直到遇到分號 `;` 纔會執行。即使語法正確,如果未輸入完畢,也會持續顯示 `->`。 **示例**: ```sql mysql> SELECT * -> FROM users -> WHERE age > 20; -- 必須輸入完所有行並以分號結束 ``` **解決方法**: - 繼續輸入剩餘內容,並以半角分號 `;` 結尾。 ### **2. 使用了未閉合的註釋** 如果在語句中開啓了註釋(如 `/* ... */`)但未閉合,MySQL 會等待註釋結束。 **示例**: ```sql mysql> SELECT * FROM users /* 這是一個未閉合的註釋 -> ; -- 即使輸入分號,註釋未閉合也會報錯 ``` **解決方法**: - 補全註釋閉合符號 `*/`,再輸入分號: ```sql mysql> SELECT * FROM users /* 閉合註釋 */ -> ; ``` ### **3. 執行存儲過程/函數時未切換分隔符** 在定義存儲過程、觸發器或函數時,語句內部可能包含分號 `;`。若未臨時更改分隔符,MySQL 會在第一個分號處提前終止輸入。 **示例**: ```sql mysql> CREATE PROCEDURE test() -> BEGIN -> SELECT * FROM users; -- 此處分號會觸發立即執行 -> END; ERROR 1064 (42000): You have an error in your SQL syntax... ``` **解決方法**: - 使用 `DELIMITER` 命令臨時切換分隔符(如 `//`),再定義存儲過程: ```sql mysql> DELIMITER // mysql> CREATE PROCEDURE test() -> BEGIN -> SELECT * FROM users; -> END // mysql> DELIMITER ; ``` ### **4. 粘貼的語句包含隱藏字符** 從網頁、文檔複製 SQL 時,可能攜帶 **不可見的控制字符**(如換行符 `\r`、`\n`)或 **全角符號**,導致 MySQL 無法識別。 **解決方法**: - 使用純文本編輯器(如 Notepad++)清理格式,重新粘貼。 - 手動逐行輸入語句,避免複製。 ### **5. 客戶端編碼或終端問題** 如果終端或客戶端的字符編碼設置錯誤(如 UTF-8 支持異常),可能導致輸入的分號被識別爲其他字符。 **解決方法**: - 檢查客戶端編碼: ```sql mysql> SHOW VARIABLES LIKE 'character%'; ``` - 確保客戶端、服務端編碼一致(建議 `utf8mb4`)。 ### **6. 輸入被意外中斷** 如果輸入時按下 **Ctrl+C** 或其他中斷鍵,可能導致會話進入異常狀態。 **解決方法**: - 輸入 `\c` 清除當前輸入,重新開始: ```sql mysql> SELECT * FROM users -> \c mysql> ``` ### **終極驗證方法** 輸入一個最簡單的語句,觀察是否仍顯示 `->`: ```sql mysql> SELECT 1; ``` - 如果正常返回結果,說明之前的問題是由特定語句的複雜性引起。 - 如果仍顯示 `->`,可能是客戶端或環境配置問題,嘗試重啓 MySQL 客戶端或更換終端工具(如 MySQL Workbench)。 如果問題仍未解決,請提供以下信息: 1. 你輸入的 **完整語句**。 2. MySQL 客戶端版本(通過 `mysql --version` 查看)。 3. 操作系統類型(Windows/Linux/macOS)。 我:我重啓之後就解決了,這是爲什麼? DS: 你通過 **重啓 MySQL 客戶端或服務** 後問題解決,可能的原因如下: ### **1. 客戶端會話狀態異常** - **問題根源**: MySQL 客戶端在輸入過程中可能因某些操作(如未正確處理中斷、緩衝區錯誤等)進入 **異常狀態**,導致後續輸入被錯誤解析。 - **重啓的作用**: 重啓客戶端會強制 **重置會話狀態**,清除緩存和未完成的輸入,恢復到初始環境。 ### **2. 未正確關閉的臨時文件或鎖** - **問題根源**: 如果之前的 MySQL 會話異常終止(如直接關閉終端、斷電等),可能導致客戶端或服務端遺留臨時文件或鎖,影響後續操作。 - **重啓的作用**: 重啓會釋放這些殘留的臨時資源,解除潛在的衝突。 ### **3. 客戶端/服務端編碼或配置臨時錯亂** - **問題根源**: 某些情況下,客戶端或服務端的字符編碼設置(如 `utf8`、`latin1`)可能因臨時操作(如粘貼特殊字符)出現混亂,導致輸入的分號或語句被錯誤解析。 - **重啓的作用**: 重啓會重新加載配置文件,恢復默認編碼和設置。 ### **4. 終端(Terminal)本身的兼容性問題** - **問題根源**: 如果你使用某些終端工具(如老版本的 CMD、PuTTY 等),可能在長時間使用後因內存泄漏或渲染錯誤,導致輸入內容與實際傳輸內容不一致(如分號顯示正常但實際是亂碼)。 - **重啓的作用**: 重啓終端工具會重置其內部狀態,確保輸入內容正確傳遞到 MySQL 客戶端。 ### **5. MySQL 服務的臨時故障** - **問題根源**: 極少數情況下,MySQL 服務可能因內存不足、連接數超限等臨時問題,無法正確處理客戶端請求,導致交互異常。 - **重啓的作用**: 重啓 MySQL 服務會釋放資源,修復臨時故障。 ### **如何避免頻繁重啓?** 1. **優先嚐試清理當前輸入**: 輸入 `\c` 清除當前未提交的語句,直接回到新提示符: ```sql mysql> SELECT * FROM users -> \c mysql> ``` 2. **檢查分隔符狀態**: 如果之前修改過分隔符(如 `DELIMITER //`),確保恢復爲默認值 `;`: ```sql mysql> DELIMITER ; ``` 3. **使用更穩定的終端工具**: 推薦使用現代終端工具(如 Windows Terminal、iTerm2)或圖形化客戶端(如 MySQL Workbench)。 ### **總結** 重啓本質是通過 **重置狀態** 解決臨時性異常。如果問題復現,需結合具體場景分析根本原因(如檢查輸入內容、客戶端版本、系統日誌等)。

書籍信息

作者關東昇
出版社清華大學出版社
出版時間2018-11-01
ISBN9787302509332
分類計算機-編程設計
格式EPUB
完結狀態連載中
章節數185