Tell me more ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

Hi i am using python and database as Mysql, Now i want to connect to Mysql database from python and i wrote the below code

Method_1

import MySQLdb as mdb


conn = mdb.connect('ip_address', 'user_name', 'pass_word', 'database_name') 

By using above i can connect to Mysql succesfully, but i want to know whether we can do the same by using a connection string and accessing like i mentioned below

Method_2

connectString=Server=ip_address;Database=database_name;UID=user_name;PWD=pass_word
conn = mdb.connect(connectString) 

But i am getting an error by using above, so can anyone let me know whether we can access Mysql database only by method_1 or is there any way to declare the access credentials to some variable and using that variable to connect as i mentioned in method_2

Edited Code:

Actually what i am trying is given below

example_file.ini

[for_primary]

connectString=host="192.168.xx.xxx",user="username_1",passwd="password_1",db="database_1"

[for_secondary]

connectString=host="192.168.xx.xxx",user="username_2",passwd="password_2",db="database_2"

file.py:

import ConfigParser
import MySQLdb as mdb

configFeed = ConfigParser.ConfigParser()
configFeed.read('path to file/example_file.ini')
connectString = configFeed.get('for_primary', 'connectString')
conn = mdb.connect(connectString)
print conn

Result:

 File "/usr/lib64/python2.7/site-packages/MySQLdb/__init__.py", line 81, in Connect
    return Connection(*args, **kwargs)
  File "/usr/lib64/python2.7/site-packages/MySQLdb/connections.py", line 187, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
_mysql_exceptions.OperationalError: (2005, 'Unknown MySQL server host \'host="192.168.xx.xxx",user="username_1", passwd="password_1",db="database_1"\' (0)')

So i am trying in this way because i need to connect to two databases depending upon selection in example_file.ini file. Is there any way to do like abobe by declaring to access credentials to another variable in .ini file. i am expecting is here if i get connection string from .ini file it taking those as string.

share|improve this question

2 Answers

You can't, MySQLdb.connect only supports the former option.

You can, of course, parse the connection string into it's constituents and use that as a set of keyword parameters for the .connect() function:

connectParams = dict(entry.split('=') for entry in connectString.split(';'))
mdb.connect(**connectParams)

The above splitting method is rather naive however; you probably would need a more sophisticated method that would remove unsupported options, convert certain parameter values (think use_unicode and True or False) and allow for escaping of ; and = characters where they are part of a parameter value. Refer to the .connect() documentation for supported keyword arguments.

share|improve this answer
Thanks for your reply i had edited my code please have a look at it – shiva krishna Aug 22 '12 at 12:50
@Kouripm: That format will need a bit more parsing work; see what you can come up with yourself (python is fairly easy!) and post a new question if you get stuck. – Martijn Pieters Aug 22 '12 at 12:53
actually i am using scrapy for parsing urls, i have been stucked here and seeking for help to move forward, i have googled many times and finally posted here, can u please assist me – shiva krishna Aug 22 '12 at 12:58

According to the documentation, you should be able to do this:

db=_mysql.connect(host="localhost",user="joebob", passwd="moonpie",db="thangs")

http://mysql-python.sourceforge.net/MySQLdb.html

Down in the _mysql examples section discusses the different ways to invoke connect().

Personally, I'm not aware how to do that as a single "connectionString" that you are referencing. But you should be able to use the keyword arguments with variables.

share|improve this answer
I had edited my code please look at it once – shiva krishna Aug 22 '12 at 12:51
I think @Martijn has the right answer for you. Execute that connectParams = dict(entry.split('=') for entry in connectString.split(';')) AFTER you get it from the ConfigParser and use that to call `mdb.connect(**connectParams). – themanatuf Aug 22 '12 at 13:21
thats returning as a string actually but conn.connect('string') does n't work right – shiva krishna Aug 22 '12 at 14:57
I'm not sure I understand what you're saying. connectParams is a dictionary and in the snippet you'd be passing the dictionary to the connect function not a string. I don't have a mysql server to test with, but I made a simple python script to verify that func(**connectParams) does in fact pass a dictionary to the function and not a string. – themanatuf Aug 22 '12 at 15:29

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.