亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python的Flask框架中SQLAlchemy使用時(shí)的亂碼問題解決

 更新時(shí)間:2015年11月07日 16:42:40   投稿:goldensun  
這篇文章主要介紹了Python的Flask框架中SQLAlchemy使用時(shí)的亂碼問題解決,SQLAlchemy與Python結(jié)合對(duì)數(shù)據(jù)庫的操作非常方便,需要的朋友可以參考下

一、問題

這兩天在學(xué)習(xí)使用flask + SQLAlchemy 定制一個(gè)web查詢頁面的demo ,在測試時(shí),發(fā)現(xiàn)查詢到的結(jié)果顯示亂碼 。這里將解決方法記錄下。

二、解決思路

1、flask 程序上定位

flask的文檔中提到可以通過設(shè)置SQLALCHEMY_NATIVE_UNICODE來禁止使用SQLAlchemy默認(rèn)的Unicode編碼。有可能是SQLAlchemy默認(rèn)的Unicode編碼不是UTF-8,抱著這樣的想法,在程序中指定了“SQLALCHEMY_NATIVE_UNICODE=False”,執(zhí)行程序,報(bào)錯(cuò)。

flask中還提到“use_native_unicode”為目標(biāo)編碼來指定編碼方式,嘗試將“db = SQLAlchemy(app)”改為“db = SQLAlchemy(app, use_native_unicode="utf8")”。這回雖然沒報(bào)錯(cuò),但還是亂碼。

2、mysql 上定位

突然想到有可能是建表的時(shí)候,沒有指定字符集,使用的是數(shù)據(jù)庫默認(rèn)的字符集的導(dǎo)致的。繼續(xù)找了一段時(shí)間的如何指定建表時(shí)使用字符集的方法,未果。

數(shù)據(jù)庫該不會(huì)使用的不是UTF-8吧?抱著這個(gè)想法,進(jìn)入數(shù)據(jù)庫,輸入“status”,在輸出的信息上顯示默認(rèn)是latin-1。搞了半天,原來問題在這。

mysql> status
--------------
mysql Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1
Connection id:     9
Current database:   web12306
Current user:      root@localhost
SSL:          Not in use
Current pager:     stdout
Using outfile:     ''
Using delimiter:    ;
Server version:     5.1.73 Source distribution
Protocol version:    10
Connection:       Localhost via UNIX socket
Server characterset:  utf8
Db   characterset:  utf8
Client characterset:  latin1
Conn. characterset:  latin1
UNIX socket:      /var/lib/mysql/mysql.sock

3、解決問題

即然找到了,問題就在mysql 的my.cnf 上增加相關(guān)配置,并重啟mysql 服務(wù):

# 進(jìn)入mysql的配置文件目錄
cd /etc/mysql/
# 編輯my.cnf配置文件
vim my.cnf
# 在文件中的[mysqld]下面增加一行內(nèi)容
character_set_server = utf8
# 在[client]和[mysql]下面分別增加一行內(nèi)容
default-character-set = utf8
# 保存。然后重啟MySQL的服務(wù),設(shè)置就生效了
service mysqld restart

注:需要注意的是,之前已經(jīng)存在的數(shù)據(jù),在上面修改過后,通過mysql select查詢時(shí)會(huì)是亂碼,需要重新導(dǎo)入。

PS:Python下SQLAlchemy真的是super好用,不太了解的童鞋可以嘗試一下下面這個(gè)MySQL的例子:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
from sqlalchemy.orm import mapper, sessionmaker

__author__ = 'tan9le'
 
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData
from sqlalchemy.sql.expression import Cast
from sqlalchemy.ext.compiler import compiles
from sqlalchemy.dialects.mysql import \
    BIGINT, BINARY, BIT, BLOB, BOOLEAN, CHAR, DATE, \
    DATETIME, DECIMAL, DECIMAL, DOUBLE, ENUM, FLOAT, INTEGER, \
    LONGBLOB, LONGTEXT, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, NCHAR, \
    NUMERIC, NVARCHAR, REAL, SET, SMALLINT, TEXT, TIME, TIMESTAMP, \
    TINYBLOB, TINYINT, TINYTEXT, VARBINARY, VARCHAR, YEAR

#表的屬性描述對(duì)象
metadata = MetaData()
userTable = Table(
  "wzp_user",metadata,
  Column('user_id', Integer, primary_key=True),
  Column('user_name', VARCHAR(50), unique=True, nullable=False),
  Column('password', VARCHAR(40), nullable=True)
)
#創(chuàng)建數(shù)據(jù)庫連接,MySQLdb連接方式
mysql_db = create_engine('mysql://用戶名:密碼@ip:port/dbname')
#創(chuàng)建數(shù)據(jù)庫連接,使用 mysql-connector-python連接方式
#mysql_db = create_engine("mysql+mysqlconnector://用戶名:密碼@ip:port/dbname")
#生成表
metadata.create_all(mysql_db)


#創(chuàng)建一個(gè)映射類
class User(object):
  pass
#把表映射到類
mapper(User, userTable)
#創(chuàng)建了一個(gè)自定義了的 Session類
Session = sessionmaker()
#將創(chuàng)建的數(shù)據(jù)庫連接關(guān)聯(lián)到這個(gè)session
Session.configure(bind=mysql_db)
session = Session()


def main():
  u = User()
  #給映射類添加以下必要的屬性,因?yàn)樯厦鎰?chuàng)建表指定這個(gè)字段不能為空,且唯一
  u.user_name='tan9le測試'
  #按照上面創(chuàng)建表的相關(guān)代碼,這個(gè)字段允許為空
  u.password='123456'
  #在session中添加內(nèi)容
  session.add(u)
  #保存數(shù)據(jù)
  session.flush()
  #數(shù)據(jù)庫事務(wù)的提交,sisson自動(dòng)過期而不需要關(guān)閉
  session.commit()

  #query() 簡單的理解就是select() 的支持 ORM 的替代方法,可以接受任意組合的 class/column 表達(dá)式
  query = session.query(User)
  #列出所有user
  print list(query)
  #根據(jù)主鍵顯示
  print query.get(1)
  #類似于SQL的where,打印其中的第一個(gè)
  print query.filter_by(user_name='tan9le測試').first()
  u = query.filter_by(user_name='tan9le測試').first()
  #修改其密碼字段
  u.password = '654321'
  #提交事務(wù)
  session.commit()
  #打印會(huì)出現(xiàn)新密碼
  print query.get(1).password
  #根據(jù)id字段排序,打印其中的用戶名和密碼
  for instance in session.query(User).order_by(User.user_id):
    print instance.user_name, instance.password
  #釋放資源
  session.close()



if __name__ == '__main__':
  main()

相關(guān)文章

  • pytorch如何使用Imagenet預(yù)訓(xùn)練模型訓(xùn)練

    pytorch如何使用Imagenet預(yù)訓(xùn)練模型訓(xùn)練

    這篇文章主要介紹了pytorch如何使用Imagenet預(yù)訓(xùn)練模型訓(xùn)練問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Python使用中文正則表達(dá)式匹配指定中文字符串的方法示例

    Python使用中文正則表達(dá)式匹配指定中文字符串的方法示例

    這篇文章主要介紹了Python使用中文正則表達(dá)式匹配指定中文字符串的方法,結(jié)合實(shí)例形式分析了Python正則匹配及字符編碼相關(guān)操作技巧,需要的朋友可以參考下
    2017-01-01
  • Python字典的基本用法實(shí)例分析【創(chuàng)建、增加、獲取、修改、刪除】

    Python字典的基本用法實(shí)例分析【創(chuàng)建、增加、獲取、修改、刪除】

    這篇文章主要介紹了Python字典的基本用法,結(jié)合具體實(shí)例形式分析了Python字典的創(chuàng)建、增加、獲取、修改、刪除等基本操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2019-03-03
  • Python內(nèi)置數(shù)據(jù)類型詳解

    Python內(nèi)置數(shù)據(jù)類型詳解

    這篇文章主要介紹了Python內(nèi)置數(shù)據(jù)類型,需要的朋友可以參考下
    2014-08-08
  • Python3創(chuàng)建Django項(xiàng)目的幾種方法(3種)

    Python3創(chuàng)建Django項(xiàng)目的幾種方法(3種)

    這篇文章主要介紹了Python3創(chuàng)建Django項(xiàng)目的幾種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Django項(xiàng)目配置連接多個(gè)數(shù)據(jù)庫的方法記錄

    Django項(xiàng)目配置連接多個(gè)數(shù)據(jù)庫的方法記錄

    最近在進(jìn)行django項(xiàng)目開發(fā)的時(shí)候,遇到了需要連接兩個(gè)MySQL數(shù)據(jù)庫的問題,下面這篇文章主要給大家介紹了關(guān)于Django項(xiàng)目配置連接多個(gè)數(shù)據(jù)庫的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • Python利用watchdog模塊監(jiān)控文件變化

    Python利用watchdog模塊監(jiān)控文件變化

    這篇文章主要為大家介紹一個(gè)Python中的模塊:watchdog模塊,它可以實(shí)現(xiàn)監(jiān)控文件的變化。文中通過示例詳細(xì)介紹了watchdog模塊的使用,需要的可以參考一下
    2022-06-06
  • python如何調(diào)用php文件中的函數(shù)詳解

    python如何調(diào)用php文件中的函數(shù)詳解

    這篇文章主要給大家介紹了關(guān)于python如何調(diào)用php文件中函數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • opencv?python模糊影像檢測效果

    opencv?python模糊影像檢測效果

    這篇文章主要介紹了opencv?python模糊影像檢測,本文只使用cv2和shutil庫,若想直接使用該腳本需安裝這兩個(gè)庫,通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • Django rest framework工具包簡單用法示例

    Django rest framework工具包簡單用法示例

    這篇文章主要介紹了Django rest framework工具包簡單用法,結(jié)合匿名訪問控制的具體實(shí)例分析了Django rest framework工具包的注冊(cè)、路由設(shè)置、視圖、權(quán)限控制、配置等相關(guān)操作技巧,需要的朋友可以參考下
    2018-07-07

最新評(píng)論