

初めまして、こんにちは

sqlaichemyとpandas.read_sql_queryにてmysqlのlike機能で  
日本語のキーワードを選択したいですが、どうやって動けますか？

英語のキーワードを下記のように選択すると、動けるんですが

[code]

    statement = "SELECT * FROM orderitem WHERE item_description like '%example%'"
    df = pd.read_sql_query(text(statement), engine)
    
[/code]

日本語のキーワードを使うと、エラーが出てます。

[code]

    statement = "SELECT * FROM orderitem WHERE item_description like '%日本語%'"
    df = pd.read_sql_query(text(statement), engine)
    
[/code]

エラー：

[code]

    UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 55: ordinal not in range(128)
    
[/code]

ps- このquery "SELECT * FROM orderitem WHERE item_description like '%日本語%'"
はterminalで動けるんですが、python で作業するとエラーが出てしまいます。

私のコード：

[code]

    import pymysql
    import os
    import pandas as pd
    from sqlalchemy import create_engine, text
    
    db = pymysql.connect(db=db, user='root', passwd=passwd, charset='utf8', unix_socket="/var/run/mysqld/mysqld.sock", local_infile=True)
    cursor = db.cursor()
    cursor.execute("SET NAMES utf8")
    engine = create_engine('mysql+pymysql://root:passwd@localhost:4406/db?charset=utf8')
    
    statement = "SELECT * FROM orderitem WHERE item_description like '%日本語%'"
    df = pd.read_sql_query(text(statement), engine)
    
[/code]

色々調べたんですenginer とconnetionの方でencoding = utf-8を追加してもうまく解決できません..

よければ教えていただけると嬉しいです。  
ありがとうございます。


CC BY-SA 3.0
2017-05-24T13:47:36.927
34989
2019-04-11T01:38:50.817
2019-04-11T01:38:50.817
754
14629
question
python pandas 日本語 sqlalchemy
python SQLAlchemy & pandas read_sql_query 日本語の処理について


もしかして利用されてるPythonのバージョンは2系ですか？ もしそうなのであれば、SQL文をUnicode文字列で書いてみてください。

[code]

    # ダブルクォーテションの前に「u」をつける
    statement = u"SELECT * FROM orderitem WHERE item_description like '%日本語%'"
    
[/code]

あと `read_sql_query` は 文字列でも多分大丈夫です。(textと、どちらが良いのかはわかっていませんが。)

[code]

    statement = u"SELECT * FROM orderitem WHERE item_description like '%日本語%'"
    # text 関数を使わずに直接文字列を渡す
    df = pd.read_sql_query(statement, engine)
    
[/code]

<http://pandas.pydata.org/pandas-
docs/version/0.18.1/generated/pandas.read_sql_query.html>


CC BY-SA 3.0
2017-05-24T15:47:25.200
34993
2017-05-24T15:47:25.200
2168
34989
answer


結局tell kのコメントに参考し

[code]

    #ダブルクォーテションの前に「u」をつける
    statement = u"SELECT * FROM orderitem WHERE item_description like '%日本語%'"
    
[/code]

で解決しました！

私のpython は2.7で、コードは以下になります。

[code]

    import pymysql
    import os
    import pandas as pd
    from sqlalchemy import create_engine, text
    
    db = pymysql.connect(db=db, user='root', passwd=passwd, charset='utf8', 
    unix_socket="/var/run/mysqld/mysqld.sock", local_infile=True)
    cursor = db.cursor()
    cursor.execute("SET NAMES utf8")
    engine = create_engine('mysql+pymysql://root:passwd@localhost:4406/db?charset=utf8')
    
    statement = "SELECT * FROM orderitem WHERE item_description like '%日本語%'"
    df = pd.read_sql_query(text(statement), engine)
    
[/code]


CC BY-SA 3.0
2017-05-24T16:34:58.270
34994
2017-05-24T16:34:58.270
14629
34989
answer