user_guide.rst   user_guide.rst 
skipping to change at line 152 skipping to change at line 152
Generally speaking, putting passwords in your code is not such a good Generally speaking, putting passwords in your code is not such a good
idea:: idea::
db=_mysql.connect(host="outhouse",db="thangs",read_default_file="~/.my. cnf") db=_mysql.connect(host="outhouse",db="thangs",read_default_file="~/.my. cnf")
This does what the previous example does, but gets the username and This does what the previous example does, but gets the username and
password and other parameters from ~/.my.cnf (UNIX-like systems). Read password and other parameters from ~/.my.cnf (UNIX-like systems). Read
about `option files`_ for more details. about `option files`_ for more details.
.. _`option files`: http://dev.mysql.com/doc/mysql/en/Option_files.html .. _`option files`: http://dev.mysql.com/doc/refman/en/option-files.html
So now you have an open connection as ``db`` and want to do a So now you have an open connection as ``db`` and want to do a
query. Well, there are no cursors in MySQL, and no parameter query. Well, there are no cursors in MySQL, and no parameter
substitution, so you have to pass a complete query string to substitution, so you have to pass a complete query string to
``db.query()``:: ``db.query()``::
db.query("""SELECT spam, eggs, sausage FROM breakfast db.query("""SELECT spam, eggs, sausage FROM breakfast
WHERE price < 5""") WHERE price < 5""")
There's no return value from this, but exceptions can be raised. The There's no return value from this, but exceptions can be raised. The
skipping to change at line 366 skipping to change at line 366
*This must be a keyword parameter.* *This must be a keyword parameter.*
ssl ssl
This parameter takes a dictionary or mapping, where the This parameter takes a dictionary or mapping, where the
keys are parameter names used by the mysql_ssl_set_ MySQL keys are parameter names used by the mysql_ssl_set_ MySQL
C API call. If this is set, it initiates an SSL connection C API call. If this is set, it initiates an SSL connection
to the server; if there is no SSL support in the client, to the server; if there is no SSL support in the client,
an exception is raised. *This must be a keyword an exception is raised. *This must be a keyword
parameter.* parameter.*
.. _mysql_ssl_set: http://dev.mysql.com/doc/mysql/en/mysql_ssl_set.html .. _mysql_ssl_set: http://dev.mysql.com/doc/refman/en/mysql-ssl-set.html
apilevel apilevel
String constant stating the supported DB API level. '2.0' String constant stating the supported DB API level. '2.0'
threadsafety threadsafety
Integer constant stating the level of thread safety the Integer constant stating the level of thread safety the
interface supports. This is set to 1, which means: Threads may interface supports. This is set to 1, which means: Threads may
share the module. share the module.
The MySQL protocol can not handle multiple threads using the The MySQL protocol can not handle multiple threads using the
skipping to change at line 401 skipping to change at line 401
The general upshot of this is: Don't share connections between The general upshot of this is: Don't share connections between
threads. It's really not worth your effort or mine, and in the threads. It's really not worth your effort or mine, and in the
end, will probably hurt performance, since the MySQL server runs end, will probably hurt performance, since the MySQL server runs
a separate thread for each connection. You can certainly do a separate thread for each connection. You can certainly do
things like cache connections in a pool, and give those things like cache connections in a pool, and give those
connections to one thread at a time. If you let two threads use connections to one thread at a time. If you let two threads use
a connection simultaneously, the MySQL client library will a connection simultaneously, the MySQL client library will
probably upchuck and die. You have been warned. probably upchuck and die. You have been warned.
For threaded applications, try using a connection pool.
This can be done using the `Pool module`_.
.. _`Pool module`: http://dustman.net/andy/python/Pool
charset charset
The character set used by the connection. In MySQL-4.1 and newer, The character set used by the connection. In MySQL-4.1 and newer,
it is possible (but not recommended) to change the connection's it is possible (but not recommended) to change the connection's
character set with an SQL statement. If you do this, you'll also character set with an SQL statement. If you do this, you'll also
need to change this attribute. Otherwise, you'll get encoding need to change this attribute. Otherwise, you'll get encoding
errors. errors.
paramstyle paramstyle
String constant stating the type of parameter marker formatting String constant stating the type of parameter marker formatting
expected by the interface. Set to 'format' = ANSI C printf expected by the interface. Set to 'format' = ANSI C printf
skipping to change at line 444 skipping to change at line 439
can be either: can be either:
* a callable object which takes a string argument (the MySQL * a callable object which takes a string argument (the MySQL
value),' returning a Python value value),' returning a Python value
* a sequence of 2-tuples, where the first value is a combination * a sequence of 2-tuples, where the first value is a combination
of flags from ``MySQLdb.constants.FLAG``, and the second value of flags from ``MySQLdb.constants.FLAG``, and the second value
is a function as above. The sequence is tested until the flags is a function as above. The sequence is tested until the flags
on the field match those of the first value. If both values on the field match those of the first value. If both values
are None, then the default conversion is done. Presently this are None, then the default conversion is done. Presently this
is only used to distinquish TEXT and BLOB columns. is only used to distinguish TEXT and BLOB columns.
If the key is a Python type or class, then the value is a If the key is a Python type or class, then the value is a
callable Python object (usually a function) taking two arguments callable Python object (usually a function) taking two arguments
(value to convert, and the conversion dictionary) which converts (value to convert, and the conversion dictionary) which converts
values of this type to a SQL literal string value. values of this type to a SQL literal string value.
This is initialized with reasonable defaults for most This is initialized with reasonable defaults for most
types. When creating a Connection object, you can pass your own types. When creating a Connection object, you can pass your own
type converter dictionary as a keyword parameter. Otherwise, it type converter dictionary as a keyword parameter. Otherwise, it
uses a copy of ``MySQLdb.converters.conversions``. Several uses a copy of ``MySQLdb.converters.conversions``. Several
skipping to change at line 615 skipping to change at line 610
Here we are inserting three rows of five values. Notice that there is Here we are inserting three rows of five values. Notice that there is
a mix of types (strings, ints, floats) though we still only use a mix of types (strings, ints, floats) though we still only use
``%s``. And also note that we only included format strings for one ``%s``. And also note that we only included format strings for one
row. MySQLdb picks those out and duplicates them for each row. row. MySQLdb picks those out and duplicates them for each row.
Using and extending Using and extending
------------------- -------------------
In general, it is probably wise to not directly interact with the DB In general, it is probably wise to not directly interact with the DB
API except for small applicatons. Databases, even SQL databases, vary API except for small applications. Databases, even SQL databases, vary
widely in capabilities and may have non-standard features. The DB API widely in capabilities and may have non-standard features. The DB API
does a good job of providing a reasonably portable interface but some does a good job of providing a reasonably portable interface but some
methods are non-portable. Specifically, the parameters accepted by methods are non-portable. Specifically, the parameters accepted by
``connect()`` are completely implementation-dependent. ``connect()`` are completely implementation-dependent.
If you believe your application may need to run on several different If you believe your application may need to run on several different
databases, the author recommends the following approach, based on databases, the author recommends the following approach, based on
personal experience: Write a simplified API for your application which personal experience: Write a simplified API for your application which
implements the specific queries and operations your application needs implements the specific queries and operations your application needs
to perform. Implement this API as a base class which should be have to perform. Implement this API as a base class which should be have
 End of changes. 5 change blocks. 
9 lines changed or deleted 4 lines changed or added

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/