انجمن‌های فارسی اوبونتو

کمک و پشتیبانی => برنامه‌سازی => نویسنده: در حسرت داشتن سایت در 13 آبان 1388، 09:25 ق‌ظ

عنوان: نوشتن اطلاعات به فارسی در mysql با پایتون
ارسال شده توسط: در حسرت داشتن سایت در 13 آبان 1388، 09:25 ق‌ظ
این کد را در ویندوز اجرا می کنم
#-*-coding:utf8-*-
import MySQLdb
conn = MySQLdb.connect (host = 'localhost',
                           user = 'tony',
                           passwd = 'ppp',
                           db = 'store')
conn.set_character_set('utf8')
sb = unicode('پايتون','utf8')
cursor = conn.cursor ()
cursor.execute ('''
            INSERT INTO form30 (namet)
            VALUES("%s")'''%(sb))
             
         
cursor.execute ("SELECT namet FROM form30")
این ارور را میده
Traceback (most recent call last):
  File "C:\Documents and Settings\appie\Desktop\uni.py", line 7, in ?
    conn.set_character_set('utf8')
AttributeError: 'Connection' object has no attribute 'set_character_set'

در حالی که وقتی در ویندوز اجرا میشه در mysql درج میشه ولی علامت ??? درج میشه

کلا الگو واحدی هست تا در لینوکس و ویندوز اطلاعات را فارسی در mysql  درج کنم و از اون لیستگیری کنم ?
عنوان: پاسخ به: نوشتن اطلاعات به فارسی در mysql با پایتون
ارسال شده توسط: در حسرت داشتن سایت در 14 آبان 1388، 07:31 ب‌ظ
یه کم نزدیک شدم
چکار کنم تا رشته ""سلام"" به فارسی تبدیل به کد '\xd3\xe1\xc7\xe3' بشه در شل این کارو میکنم
 
>>> u'سلام'
u'\xd3\xe1\xc7\xe3'
ولی وقتی در فایل می خوام این کارو بکنم گیج شدم دیگه
چطوری با پایتون این کارو بکنم و اسم این کار چیه ؟

عنوان: پاسخ به: نوشتن اطلاعات به فارسی در mysql با پایتون
ارسال شده توسط: سعید رسولی در 14 آبان 1388، 08:53 ب‌ظ
با تابع repr
تابع eval هم برعکس این کار رو انجام میده.
عنوان: پاسخ به: نوشتن اطلاعات به فارسی در mysql با پایتون
ارسال شده توسط: در حسرت داشتن سایت در 16 آبان 1388، 12:18 ب‌ظ
لطفا ملاحظه کنید
# -*- coding: utf8 -*-
import MySQLdb
r=1
conn = MySQLdb.connect(host='localhost', user='tony', passwd='ppp',db='store')
curs = conn.cursor( )
##conn.set_character_set('utf8')
curs.execute('select * from form30')
ted='پايتون'
ted=repr(ted)
curs.execute ("""
     INSERT INTO form30 (namet)
     VALUES("%s")"""%(ted))
curs.execute('select * from form30')
p=curs.fetchall()
for i in p :
  print i
print ted
خروجی:
("'xd9xbexd8xa7xd9x8axd8xaaxd9x88xd9x86'",)
'\xd9\xbe\xd8\xa7\xd9\x8a\xd8\xaa\xd9\x88\xd9\x86'
در حالی که من به این الگو نیاز دارم
>>> u='پايتون'
>>> u
'\x81\xc7\xed\xca\xe6\xe4'
یعنی دقیقا به این کد
'\x81\xc7\xed\xca\xe6\xe4'برای اینکه لیست گیری کنم
عنوان: پاسخ به: نوشتن اطلاعات به فارسی در mysql با پایتون
ارسال شده توسط: سعید رسولی در 16 آبان 1388، 08:41 ب‌ظ
بخاطر اینکه شما دارید از ویندوز استفاده می‌کنید و انکودینگ‌ش windows-1256 هست نه utf8
خروجی این دو دستور(با تعیین صریح Encoding) توی ویندوز و گنو/لینوکس یکی هست:
>>> repr(u'پايتون'.encode('windows-1256'))
"'\\x81\\xc7\\xed\\xca\\xe6\\xe4'"
>>> repr(u'پايتون'.encode('utf8'))
"'\\xd9\\xbe\\xd8\\xa7\\xd9\\x8a\\xd8\\xaa\\xd9\\x88\\xd9\\x86'"

خروجی بدون تعیین Encoding توی گنو/لینوکس:
>>> repr('پايتون')
"'\\xd9\\xbe\\xd8\\xa7\\xd9\\x8a\\xd8\\xaa\\xd9\\x88\\xd9\\x86'"


خروجی بدون تعیین Encoding توی ویندوز:
>>> repr('پايتون')
"'\\x81\\xc7\\xed\\xca\\xe6\\xe4'"