sap
sap

Reputation: 319

inserting unicode values in mysql using python

I want to insert unicode text to mysql table, so for this I have written below code

I am using flask framework

import MySQLdb as ms
db = ms.connect("localhost","username","password","dbname")
cursor = db.cursor()

my_text = "का" #this is marathi lang word
enc = my_text.encode('utf-8')  #after encoding still it shows me marathi word
db_insert = "INSERT INTO TEXT(text) VALUES '{0}'"
cursor.execute(db_insert,(enc))
db.commit()

It gives me following error

TypeError: not all arguments converted during string formatting on line cursor.execute()

How to remove this error ?

Upvotes: 0

Views: 1461

Answers (2)

Rick James
Rick James

Reputation: 142298

Put this in the beginning of the source code:

# -*- coding: utf-8 -*-

And don't encode something that is already encoded - remove my_text.encode('utf-8')

Use charset="utf8", use_unicode=True in the connection call.

The CHARACTER SET in the table/column must be utf8 or utf8mb4. latin1 will not work correctly.

Python checklist

Upvotes: 1

AKS
AKS

Reputation: 19831

You need to pass a sequence (a list or tuple) to the params in cursor.execute statement:

db_insert = "INSERT INTO TEXT(text) VALUES (%s)"
# notice the comma at the end to convert it to tuple
cursor.execute(db_insert,(enc,)) 

You can read more in the documentation:

Why the tuple? Because the DB API requires you to pass in any parameters as a sequence.


Alternatively, you could even use named parameters:

db_insert = "INSERT INTO TEXT(text) VALUES (%(my_text)s)"
#and then you can pass a dict with key and value
cursor.execute(db_insert, {'my_text': enc}) 

Upvotes: 0

Related Questions