mirror of
https://github.com/PyMySQL/mysqlclient.git
synced 2025-08-16 03:50:43 +08:00
* Update README
* Completely rewrite setup.py * Make pytimes the only time implementation, moved into times
This commit is contained in:
@ -1,50 +0,0 @@
|
|||||||
"""Use mx.DateTime to handle date and time columns."""
|
|
||||||
|
|
||||||
from time import strftime, localtime
|
|
||||||
|
|
||||||
try:
|
|
||||||
# new packaging
|
|
||||||
from mx.DateTime import Date, Time, Timestamp, ISO, \
|
|
||||||
DateTimeType, DateTimeDeltaType
|
|
||||||
except ImportError:
|
|
||||||
# old packaging, deprecated
|
|
||||||
from DateTime import Date, Time, Timestamp, ISO, \
|
|
||||||
DateTimeType, DateTimeDeltaType
|
|
||||||
|
|
||||||
def DateFromTicks(ticks):
|
|
||||||
"""Convert UNIX ticks into a mx.DateTime.Date."""
|
|
||||||
return Date(*localtime(ticks)[:3])
|
|
||||||
|
|
||||||
def TimeFromTicks(ticks):
|
|
||||||
"""Convert UNIX ticks into a mx.DateTime.Time."""
|
|
||||||
return Time(*localtime(ticks)[3:6])
|
|
||||||
|
|
||||||
def TimestampFromTicks(ticks):
|
|
||||||
"""Convert UNIX ticks into a mx.DateTime.Timestamp."""
|
|
||||||
return Timestamp(*localtime(ticks)[:6])
|
|
||||||
|
|
||||||
def format_DATE(d):
|
|
||||||
"""Format a DateTime object as an ISO date."""
|
|
||||||
return d.strftime("%Y-%m-%d")
|
|
||||||
|
|
||||||
def format_TIME(d):
|
|
||||||
"""Format a DateTime object as a time value."""
|
|
||||||
return d.strftime("%d %H:%M:%S")
|
|
||||||
|
|
||||||
def format_TIMESTAMP(d):
|
|
||||||
"""Format a DateTime object as an ISO timestamp."""
|
|
||||||
return d.strftime("%Y-%m-%d %H:%M:%S")
|
|
||||||
|
|
||||||
def DateTime_or_None(s):
|
|
||||||
try: return ISO.ParseDateTime(s)
|
|
||||||
except: return None
|
|
||||||
|
|
||||||
def TimeDelta_or_None(s):
|
|
||||||
try: return ISO.ParseTimeDelta(s)
|
|
||||||
except: return None
|
|
||||||
|
|
||||||
Time_or_None = TimeDelta_or_None
|
|
||||||
|
|
||||||
def Date_or_None(s):
|
|
||||||
try: return ISO.ParseDate(s)
|
|
||||||
except: return None
|
|
@ -1,73 +0,0 @@
|
|||||||
"""Use Python datetime module to handle date and time columns."""
|
|
||||||
|
|
||||||
# datetime is only in Python 2.3 or newer, so it is safe to use
|
|
||||||
# string methods.
|
|
||||||
|
|
||||||
from time import localtime
|
|
||||||
from datetime import date, datetime, time, timedelta
|
|
||||||
|
|
||||||
Date = date
|
|
||||||
Time = time
|
|
||||||
TimeDelta = timedelta
|
|
||||||
Timestamp = datetime
|
|
||||||
|
|
||||||
DateTimeDeltaType = timedelta
|
|
||||||
DateTimeType = datetime
|
|
||||||
|
|
||||||
def DateFromTicks(ticks):
|
|
||||||
"""Convert UNIX ticks into a date instance."""
|
|
||||||
return date(*localtime(ticks)[:3])
|
|
||||||
|
|
||||||
def TimeFromTicks(ticks):
|
|
||||||
"""Convert UNIX ticks into a time instance."""
|
|
||||||
return time(*localtime(ticks)[3:6])
|
|
||||||
|
|
||||||
def TimestampFromTicks(ticks):
|
|
||||||
"""Convert UNIX ticks into a datetime instance."""
|
|
||||||
return datetime(*localtime(ticks)[:6])
|
|
||||||
|
|
||||||
format_TIME = format_DATE = str
|
|
||||||
|
|
||||||
def format_TIMESTAMP(d):
|
|
||||||
return d.strftime("%Y-%m-%d %H:%M:%S")
|
|
||||||
|
|
||||||
|
|
||||||
def DateTime_or_None(s):
|
|
||||||
if ' ' in s:
|
|
||||||
sep = ' '
|
|
||||||
elif 'T' in s:
|
|
||||||
sep = 'T'
|
|
||||||
else:
|
|
||||||
return Date_or_None(s)
|
|
||||||
|
|
||||||
try:
|
|
||||||
d, t = s.split(sep, 1)
|
|
||||||
return datetime(*[ int(x) for x in d.split('-')+t.split(':') ])
|
|
||||||
except:
|
|
||||||
return Date_or_None(s)
|
|
||||||
|
|
||||||
def TimeDelta_or_None(s):
|
|
||||||
from math import modf
|
|
||||||
try:
|
|
||||||
h, m, s = s.split(':')
|
|
||||||
td = timedelta(hours=int(h), minutes=int(m), seconds=int(float(s)),
|
|
||||||
microseconds=int(modf(float(s))[0]*1000000))
|
|
||||||
if h < 0:
|
|
||||||
return -td
|
|
||||||
else:
|
|
||||||
return td
|
|
||||||
except:
|
|
||||||
return None
|
|
||||||
|
|
||||||
def Time_or_None(s):
|
|
||||||
from math import modf
|
|
||||||
try:
|
|
||||||
h, m, s = s.split(':')
|
|
||||||
return time(hour=int(h), minute=int(m), second=int(float(s)),
|
|
||||||
microsecond=int(modf(float(s))[0]*1000000))
|
|
||||||
except:
|
|
||||||
return None
|
|
||||||
|
|
||||||
def Date_or_None(s):
|
|
||||||
try: return date(*[ int(x) for x in s.split('-',2)])
|
|
||||||
except: return None
|
|
@ -1,38 +0,0 @@
|
|||||||
"""Use strings to handle date and time columns as a last resort."""
|
|
||||||
|
|
||||||
from time import strftime, localtime
|
|
||||||
|
|
||||||
DateTimeDeltaType = "DateTimeDeltaType"
|
|
||||||
DateTimeType = "DateTimeType"
|
|
||||||
|
|
||||||
def Date(year, month, day):
|
|
||||||
"""Construct an ISO date string."""
|
|
||||||
return "%04d-%02d-%02d" % (year, month, day)
|
|
||||||
|
|
||||||
def Time(hour, min, sec):
|
|
||||||
"""Construct a TIME string."""
|
|
||||||
return "%02d:%02d:%02d" % (hour, min, sec)
|
|
||||||
|
|
||||||
def Timestamp(year, month, day, hour, min, sec):
|
|
||||||
"""Construct an ISO timestamp."""
|
|
||||||
return "%04d-%02d-%02d %02d:%02d:%02d" % \
|
|
||||||
(year, month, day, hour, min, sec)
|
|
||||||
|
|
||||||
def DateFromTicks(ticks):
|
|
||||||
"""Convert UNIX ticks to ISO date format."""
|
|
||||||
return strftime("%Y-%m-%d", localtime(ticks))
|
|
||||||
|
|
||||||
def TimeFromTicks(ticks):
|
|
||||||
"""Convert UNIX ticks to time format."""
|
|
||||||
return strftime("%H:%M:%S", localtime(ticks))
|
|
||||||
|
|
||||||
def TimestampFromTicks(ticks):
|
|
||||||
"""Convert UNIX ticks to ISO timestamp format."""
|
|
||||||
return strftime("%Y-%m-%d %H:%M:%S", localtime(ticks))
|
|
||||||
|
|
||||||
def format_DATE(d):
|
|
||||||
"""Format a date as a date (does nothing, you don't have mx.DateTime)"""
|
|
||||||
return d
|
|
||||||
|
|
||||||
format_TIME = format_TIMESTAMP = format_DATE
|
|
||||||
Time_or_None = TimeDelta_or_None = Date_or_None = DateTime_or_None = format_DATE
|
|
@ -1,20 +1,78 @@
|
|||||||
"""times module
|
"""times module
|
||||||
|
|
||||||
This module provides some Date and Time classes for dealing with MySQL data.
|
This module provides some Date and Time classes for dealing with MySQL data.
|
||||||
"""
|
|
||||||
|
|
||||||
|
Use Python datetime module to handle date and time columns."""
|
||||||
|
|
||||||
|
from time import localtime
|
||||||
|
from datetime import date, datetime, time, timedelta
|
||||||
from _mysql import string_literal
|
from _mysql import string_literal
|
||||||
|
|
||||||
try:
|
Date = date
|
||||||
from pytimes import *
|
Time = time
|
||||||
|
TimeDelta = timedelta
|
||||||
|
Timestamp = datetime
|
||||||
|
|
||||||
|
DateTimeDeltaType = timedelta
|
||||||
|
DateTimeType = datetime
|
||||||
|
|
||||||
|
def DateFromTicks(ticks):
|
||||||
|
"""Convert UNIX ticks into a date instance."""
|
||||||
|
return date(*localtime(ticks)[:3])
|
||||||
|
|
||||||
|
def TimeFromTicks(ticks):
|
||||||
|
"""Convert UNIX ticks into a time instance."""
|
||||||
|
return time(*localtime(ticks)[3:6])
|
||||||
|
|
||||||
|
def TimestampFromTicks(ticks):
|
||||||
|
"""Convert UNIX ticks into a datetime instance."""
|
||||||
|
return datetime(*localtime(ticks)[:6])
|
||||||
|
|
||||||
|
format_TIME = format_DATE = str
|
||||||
|
|
||||||
|
def format_TIMESTAMP(d):
|
||||||
|
return d.strftime("%Y-%m-%d %H:%M:%S")
|
||||||
|
|
||||||
|
|
||||||
|
def DateTime_or_None(s):
|
||||||
|
if ' ' in s:
|
||||||
|
sep = ' '
|
||||||
|
elif 'T' in s:
|
||||||
|
sep = 'T'
|
||||||
|
else:
|
||||||
|
return Date_or_None(s)
|
||||||
|
|
||||||
except ImportError:
|
|
||||||
try:
|
try:
|
||||||
from mxdatetimes import *
|
d, t = s.split(sep, 1)
|
||||||
|
return datetime(*[ int(x) for x in d.split('-')+t.split(':') ])
|
||||||
|
except:
|
||||||
|
return Date_or_None(s)
|
||||||
|
|
||||||
except ImportError:
|
def TimeDelta_or_None(s):
|
||||||
# no DateTime? We'll muddle through somehow.
|
from math import modf
|
||||||
from stringtimes import *
|
try:
|
||||||
|
h, m, s = s.split(':')
|
||||||
|
td = timedelta(hours=int(h), minutes=int(m), seconds=int(float(s)),
|
||||||
|
microseconds=int(modf(float(s))[0]*1000000))
|
||||||
|
if h < 0:
|
||||||
|
return -td
|
||||||
|
else:
|
||||||
|
return td
|
||||||
|
except:
|
||||||
|
return None
|
||||||
|
|
||||||
|
def Time_or_None(s):
|
||||||
|
from math import modf
|
||||||
|
try:
|
||||||
|
h, m, s = s.split(':')
|
||||||
|
return time(hour=int(h), minute=int(m), second=int(float(s)),
|
||||||
|
microsecond=int(modf(float(s))[0]*1000000))
|
||||||
|
except:
|
||||||
|
return None
|
||||||
|
|
||||||
|
def Date_or_None(s):
|
||||||
|
try: return date(*[ int(x) for x in s.split('-',2)])
|
||||||
|
except: return None
|
||||||
|
|
||||||
def DateTime2literal(d, c):
|
def DateTime2literal(d, c):
|
||||||
"""Format a DateTime object as an ISO timestamp."""
|
"""Format a DateTime object as an ISO timestamp."""
|
||||||
|
106
MySQLdb/README
106
MySQLdb/README
@ -2,7 +2,8 @@
|
|||||||
MySQLdb Installation
|
MySQLdb Installation
|
||||||
====================
|
====================
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
..
|
||||||
|
|
||||||
Prerequisites
|
Prerequisites
|
||||||
-------------
|
-------------
|
||||||
@ -11,12 +12,10 @@ Prerequisites
|
|||||||
|
|
||||||
* http://www.python.org/
|
* http://www.python.org/
|
||||||
|
|
||||||
* Versions lower than 2.2 WON'T WORK.
|
* Versions lower than 2.3 WON'T WORK.
|
||||||
|
|
||||||
* 2.2.x MIGHT work, or have partial functionality.
|
|
||||||
|
|
||||||
* 2.4 is tested and works.
|
|
||||||
|
|
||||||
|
* 2.4 is the primary test environment.
|
||||||
|
|
||||||
* Red Hat Linux:
|
* Red Hat Linux:
|
||||||
|
|
||||||
- Make sure you have the Python development headers and libraries
|
- Make sure you have the Python development headers and libraries
|
||||||
@ -30,17 +29,16 @@ Prerequisites
|
|||||||
|
|
||||||
* Versions lower than 3.22.19 might not work.
|
* Versions lower than 3.22.19 might not work.
|
||||||
|
|
||||||
* MySQL-3.22 is deprecated in favor of 3.23, but still supported.
|
* MySQL-3.22 might work but isn't supported anymore. It's very old.
|
||||||
|
|
||||||
* MySQL-3.23 is supported, but slightly deprecated.
|
* MySQL-3.23 ought to work, but it's pretty elderly.
|
||||||
|
|
||||||
* MySQL-4.0 is supported.
|
* MySQL-4.0 is supported, but not tested and slightly discouraged.
|
||||||
|
|
||||||
* MySQL-4.1 is mostly supported; the new prepared statements API
|
* MySQL-4.1 is supported and tested. The prepared statements API is not
|
||||||
is not yet supported, and probably won't be until MySQLdb-1.3 or
|
supported, and won't be until MySQLdb-1.3 or 2.0.
|
||||||
2.0.
|
|
||||||
|
|
||||||
* MySQL-5.0 and newer are not currently supported, but might work.
|
* MySQL-5.0 is supported and tested, including stored procedures.
|
||||||
|
|
||||||
* MaxDB, formerly known as SAP DB (and maybe Adabas D?), is a
|
* MaxDB, formerly known as SAP DB (and maybe Adabas D?), is a
|
||||||
completely different animal. Use the sapdb.sql module that comes
|
completely different animal. Use the sapdb.sql module that comes
|
||||||
@ -64,10 +62,7 @@ Prerequisites
|
|||||||
|
|
||||||
* Transactions (particularly InnoDB tables) are supported for
|
* Transactions (particularly InnoDB tables) are supported for
|
||||||
MySQL-3.23 and up. You may need a special package from your vendor
|
MySQL-3.23 and up. You may need a special package from your vendor
|
||||||
with this support turned on. If you have Gentoo Linux, set either
|
with this support turned on.
|
||||||
of the berkdb or innodb USE flags on your server, and comment out
|
|
||||||
"skip-innodb" in /etc/mysql/my.cnf for InnoDB table support.
|
|
||||||
|
|
||||||
|
|
||||||
+ zlib
|
+ zlib
|
||||||
|
|
||||||
@ -82,7 +77,9 @@ Prerequisites
|
|||||||
+ openssl
|
+ openssl
|
||||||
|
|
||||||
* May be needed for MySQL-4.0 or newer, depending on compilation
|
* May be needed for MySQL-4.0 or newer, depending on compilation
|
||||||
options.
|
options. If you need it, you probably already have it.
|
||||||
|
|
||||||
|
- you may need openssl-devel on some platforms
|
||||||
|
|
||||||
+ C compiler
|
+ C compiler
|
||||||
|
|
||||||
@ -106,39 +103,34 @@ options, and should work as is on any POSIX-like platform, so long as
|
|||||||
mysql_config is in your path.
|
mysql_config is in your path.
|
||||||
|
|
||||||
Depending on which version of MySQL you have, you may have the option
|
Depending on which version of MySQL you have, you may have the option
|
||||||
of using three different client libraries:
|
of using three different client libraries. To select the client library,
|
||||||
|
edit the [options] section of site.cfg:
|
||||||
|
|
||||||
mysqlclient
|
embedded
|
||||||
mostly but not guaranteed thread-safe
|
use embedded server library (libmysqld) if True; otherwise use
|
||||||
|
one of the client libraries (default).
|
||||||
|
|
||||||
mysqlclient_r
|
threadsafe
|
||||||
thread-safe, use if you can
|
thread-safe client library (libmysqlclient_r) if True (default);
|
||||||
|
otherwise use non-thread-safe (libmysqlclient). You should
|
||||||
|
always use the thread-safe library if you have the option;
|
||||||
|
otherwise you *may* have problems.
|
||||||
|
|
||||||
mysqld
|
static
|
||||||
embedded server
|
if True, try to link against a static library; otherwise link
|
||||||
|
against dynamic libraries (default). You may need static linking
|
||||||
mysqlclient_r is used by default. To use one of the others, set
|
to use the embedded server.
|
||||||
the environment variable mysqlclient to the name of the library
|
|
||||||
you want to use. In a Bourne-style shell, use::
|
|
||||||
|
|
||||||
$ export mysqlclient=mysqlclient
|
|
||||||
|
|
||||||
Only do this if you don't have the thread-safe library (mysqlclient_r)
|
|
||||||
or you want to use the embedded server (mysqld).
|
|
||||||
|
|
||||||
Finally, putting it together::
|
Finally, putting it together::
|
||||||
|
|
||||||
$ tar xfz MySQL-python-1.2.0.tar.gz
|
$ tar xfz MySQL-python-1.2.1.tar.gz
|
||||||
$ cd MySQL-python-1.2.0
|
$ cd MySQL-python-1.2.1
|
||||||
|
$ # edit site.cfg if necessary
|
||||||
$ python setup.py build
|
$ python setup.py build
|
||||||
$ su # or use sudo
|
$ sudo python setup.py install # or su first
|
||||||
# python setup.py install
|
|
||||||
|
|
||||||
NOTE: You must export environment variables for setup.py to see them.
|
|
||||||
Depending on what shell you prefer, you may need to use "export" or
|
|
||||||
"set -x" (bash and other Bourne-like shells) or "setenv" (csh-like
|
|
||||||
shells).
|
|
||||||
|
|
||||||
Windows
|
Windows
|
||||||
.......
|
.......
|
||||||
|
|
||||||
@ -158,6 +150,10 @@ which is the path to your MySQL installation. In theory, it would be
|
|||||||
possible to get this information out of the registry, but like I said,
|
possible to get this information out of the registry, but like I said,
|
||||||
I don't do Windows, but I'll accept a patch that does this.
|
I don't do Windows, but I'll accept a patch that does this.
|
||||||
|
|
||||||
|
On Windows, you will definitely have to edit site.cfg since there is
|
||||||
|
no mysql_config in the MySQL package.
|
||||||
|
|
||||||
|
|
||||||
Zope
|
Zope
|
||||||
....
|
....
|
||||||
|
|
||||||
@ -166,12 +162,6 @@ the python executable that came with Zope. Otherwise, you'll install
|
|||||||
into the wrong Python tree and Zope (ZMySQLDA) will not be able to
|
into the wrong Python tree and Zope (ZMySQLDA) will not be able to
|
||||||
find _mysql.
|
find _mysql.
|
||||||
|
|
||||||
With zope.org's Zope-2.5.1-linux2-x86 binary tarball, you'd do
|
|
||||||
something like this::
|
|
||||||
|
|
||||||
$ export ZOPEBIN=".../Zope-2.5.1-linux2-x86/bin" # wherever you unpacked it
|
|
||||||
$ $ZOPEBIN/python setup.py install # builds and installs
|
|
||||||
|
|
||||||
|
|
||||||
Binary Packages
|
Binary Packages
|
||||||
---------------
|
---------------
|
||||||
@ -187,17 +177,18 @@ RPMs
|
|||||||
If you prefer to install RPMs, you can use the bdist_rpm command with
|
If you prefer to install RPMs, you can use the bdist_rpm command with
|
||||||
setup.py. This only builds the RPM; it does not install it. You may
|
setup.py. This only builds the RPM; it does not install it. You may
|
||||||
want to use the --python=XXX option, where XXX is the name of the
|
want to use the --python=XXX option, where XXX is the name of the
|
||||||
Python executable, i.e. python, python2, python2.1; the default is
|
Python executable, i.e. python, python2, python2.4; the default is
|
||||||
python. Using this will incorporate the Python executable name into
|
python. Using this will incorporate the Python executable name into
|
||||||
the package name for the RPM so you have install the package multiple
|
the package name for the RPM so you have install the package multiple
|
||||||
times if you need to support more than one version of Python.
|
times if you need to support more than one version of Python. You can
|
||||||
|
also set this in setup.cfg.
|
||||||
|
|
||||||
|
|
||||||
Red Hat Linux
|
Red Hat Linux
|
||||||
.............
|
.............
|
||||||
|
|
||||||
MySQL-python is pre-packaged in Red Hat Linux 7.x and newer. This
|
MySQL-python is pre-packaged in Red Hat Linux 7.x and newer. This
|
||||||
likely includes Fedora Core and Red Hat Enterprise Linux. You can also
|
includes Fedora Core and Red Hat Enterprise Linux. You can also
|
||||||
build your own RPM packages as described above.
|
build your own RPM packages as described above.
|
||||||
|
|
||||||
|
|
||||||
@ -208,13 +199,22 @@ Packaged as `python-mysqldb`_::
|
|||||||
|
|
||||||
# apt-get install python-mysqldb
|
# apt-get install python-mysqldb
|
||||||
|
|
||||||
|
Or use Synaptic.
|
||||||
|
|
||||||
.. _`python-mysqldb`: http://packages.debian.org/python-mysqldb
|
.. _`python-mysqldb`: http://packages.debian.org/python-mysqldb
|
||||||
|
|
||||||
|
|
||||||
|
Ubuntu
|
||||||
|
......
|
||||||
|
|
||||||
|
Same as with Debian.
|
||||||
|
|
||||||
|
|
||||||
Gentoo Linux
|
Gentoo Linux
|
||||||
............
|
............
|
||||||
|
|
||||||
Packaged as `mysql-python`_. Gentoo is also my development platform::
|
Packaged as `mysql-python`_. Gentoo is also my preferred development platform,
|
||||||
|
though I have also done some with Ubuntu lately. ::
|
||||||
|
|
||||||
# emerge sync
|
# emerge sync
|
||||||
# emerge mysql-python
|
# emerge mysql-python
|
||||||
|
58
MySQLdb/metadata.cfg
Normal file
58
MySQLdb/metadata.cfg
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
[metadata]
|
||||||
|
version: 1.2.1c4
|
||||||
|
description: Python interface to MySQL
|
||||||
|
long_description:
|
||||||
|
=========================
|
||||||
|
Python interface to MySQL
|
||||||
|
=========================
|
||||||
|
|
||||||
|
MySQLdb is an interface to the popular MySQL_ database server for
|
||||||
|
Python. The design goals are:
|
||||||
|
|
||||||
|
- Compliance with Python database API version 2.0 [PEP-0249]_
|
||||||
|
|
||||||
|
- Thread-safety
|
||||||
|
|
||||||
|
- Thread-friendliness (threads will not block each other)
|
||||||
|
|
||||||
|
MySQL-3.23 through 5.0 and Python-2.3 through 2.4 are currently
|
||||||
|
supported.
|
||||||
|
|
||||||
|
MySQLdb is `Free Software`_.
|
||||||
|
|
||||||
|
.. _MySQL: http://www.mysql.com/
|
||||||
|
.. _`Free Software`: http://www.gnu.org/
|
||||||
|
.. [PEP-0249] http://www.python.org/peps/pep-0249.html
|
||||||
|
author: Andy Dustman
|
||||||
|
author_email: andy@dustman.net
|
||||||
|
license: GPL
|
||||||
|
platforms: ALL
|
||||||
|
url: http://sourceforge.net/projects/mysql-python
|
||||||
|
download_url: http://prdownloads.sourceforge.net/mysql-python/MySQL-python-%(version)s.tar.gz
|
||||||
|
classifiers:
|
||||||
|
Development Status :: 5 - Production/Stable
|
||||||
|
Environment :: Other Environment
|
||||||
|
License :: OSI Approved :: GNU General Public License (GPL)
|
||||||
|
Operating System :: MacOS :: MacOS X
|
||||||
|
Operating System :: Microsoft :: Windows :: Windows NT/2000
|
||||||
|
Operating System :: OS Independent
|
||||||
|
Operating System :: POSIX
|
||||||
|
Operating System :: POSIX :: Linux
|
||||||
|
Operating System :: Unix
|
||||||
|
Programming Language :: C
|
||||||
|
Programming Language :: Python
|
||||||
|
Topic :: Database
|
||||||
|
Topic :: Database :: Database Engines/Servers
|
||||||
|
py_modules:
|
||||||
|
_mysql_exceptions
|
||||||
|
MySQLdb.converters
|
||||||
|
MySQLdb.connections
|
||||||
|
MySQLdb.cursors
|
||||||
|
MySQLdb.times
|
||||||
|
MySQLdb.constants.CR
|
||||||
|
MySQLdb.constants.FIELD_TYPE
|
||||||
|
MySQLdb.constants.ER
|
||||||
|
MySQLdb.constants.FLAG
|
||||||
|
MySQLdb.constants.REFRESH
|
||||||
|
MySQLdb.constants.CLIENT
|
||||||
|
|
213
MySQLdb/setup.py
213
MySQLdb/setup.py
@ -1,161 +1,86 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
"""\
|
class Abort(Exception): pass
|
||||||
=========================
|
|
||||||
Python interface to MySQL
|
|
||||||
=========================
|
|
||||||
|
|
||||||
MySQLdb is an interface to the popular MySQL_ database server for
|
|
||||||
Python. The design goals are:
|
|
||||||
|
|
||||||
- Compliance with Python database API version 2.0 [PEP-0249]_
|
|
||||||
|
|
||||||
- Thread-safety
|
|
||||||
|
|
||||||
- Thread-friendliness (threads will not block each other)
|
|
||||||
|
|
||||||
MySQL-3.22 through 4.1 and Python-2.3 through 2.4 are currently
|
|
||||||
supported.
|
|
||||||
|
|
||||||
MySQLdb is `Free Software`_.
|
|
||||||
|
|
||||||
.. _MySQL: http://www.mysql.com/
|
|
||||||
.. _`Free Software`: http://www.gnu.org/
|
|
||||||
.. [PEP-0249] http://www.python.org/peps/pep-0249.html
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
from distutils.core import setup
|
from distutils.core import setup
|
||||||
from distutils.extension import Extension
|
from distutils.extension import Extension
|
||||||
|
from ConfigParser import SafeConfigParser
|
||||||
|
|
||||||
mysqlclient = os.getenv('mysqlclient', 'mysqlclient_r')
|
if sys.version_info < (2, 3):
|
||||||
mysqlstatic = eval(os.getenv('mysqlstatic', 'False'))
|
raise Abort, "Python-2.3 or newer is required"
|
||||||
embedded_server = (mysqlclient == 'mysqld')
|
|
||||||
|
|
||||||
name = "MySQL-%s" % os.path.basename(sys.executable)
|
config = SafeConfigParser()
|
||||||
if embedded_server:
|
config.read(['metadata.cfg', 'site.cfg'])
|
||||||
name = name + "-embedded"
|
|
||||||
version = "1.2.1c3"
|
metadata = dict(config.items('metadata'))
|
||||||
|
options = dict(config.items('options'))
|
||||||
|
|
||||||
|
metadata['py_modules'] = filter(None, metadata['py_modules'].split())
|
||||||
|
metadata['classifiers'] = filter(None, metadata['classifiers'].split())
|
||||||
|
|
||||||
|
def mysql_config(what):
|
||||||
|
from os import popen
|
||||||
|
f = popen("mysql_config --%s" % what)
|
||||||
|
data = f.read().strip().split()
|
||||||
|
if f.close(): data = []
|
||||||
|
return data
|
||||||
|
|
||||||
|
# This dequote() business is required for some older versions
|
||||||
|
# of mysql_config
|
||||||
|
|
||||||
|
def dequote(s):
|
||||||
|
if (s[0] == "'" or s[0] == '"') and (s[0] == s[-1]):
|
||||||
|
s = s[1:-1]
|
||||||
|
return s
|
||||||
|
|
||||||
|
def enabled(option):
|
||||||
|
value = options[option]
|
||||||
|
s = value.lower()
|
||||||
|
if s in ('yes','true','1','y'):
|
||||||
|
return True
|
||||||
|
elif s in ('no', 'false', '0', 'n'):
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
raise Abort, "Unknown value %s for option %s" % (value, option)
|
||||||
|
|
||||||
|
include_dirs = [ dequote(i[2:])
|
||||||
|
for i in mysql_config('include')
|
||||||
|
if i.startswith('-i') ]
|
||||||
|
|
||||||
extra_objects = []
|
extra_objects = []
|
||||||
|
static = enabled('static')
|
||||||
if sys.platform == "win32":
|
if enabled('embedded'):
|
||||||
mysqlroot = os.getenv('mysqlroot', None)
|
libs = mysql_config("libmysqld_libs")
|
||||||
if mysqlroot is None:
|
client = "mysqld"
|
||||||
print "You need to set the environment variable mysqlroot!"
|
elif enabled('threadsafe'):
|
||||||
print "This should be the path to your MySQL installation."
|
libs = mysql_config("libs_r")
|
||||||
print "Probably C:\Program Files\MySQL 4.1\ or something like that."
|
client = "mysqlclient_r"
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
include_dirs = [os.path.join(mysqlroot, "include")]
|
|
||||||
library_dirs = [os.path.join(mysqlroot, "libs")]
|
|
||||||
libraries = ['zlib', 'msvcrt', 'libcmt', 'wsock32', 'advapi32']
|
|
||||||
if mysqlstatic:
|
|
||||||
extra_objects.append(os.path.join(
|
|
||||||
library_dirs[0], mysqlclient+'.lib'))
|
|
||||||
else:
|
|
||||||
libraries.append(mysqlclient)
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
libs = mysql_config("libs")
|
||||||
def config(what):
|
client = "mysqlclient"
|
||||||
from os import popen
|
|
||||||
f = popen("mysql_config --%s" % what)
|
|
||||||
data = f.read().strip().split()
|
|
||||||
if f.close(): data = []
|
|
||||||
return data
|
|
||||||
|
|
||||||
# This dequote() business is required for some older versions
|
library_dirs = [ dequote(i[2:]) for i in libs if i.startswith("-L") ]
|
||||||
# of mysql_config
|
libraries = [ dequote(i[2:]) for i in libs if i.startswith("-l") ]
|
||||||
|
|
||||||
def dequote(s):
|
|
||||||
if (s[0] == "'" or s[0] == '"') and (s[0] == s[-1]):
|
|
||||||
s = s[1:-1]
|
|
||||||
return s
|
|
||||||
|
|
||||||
include_dirs = [ dequote(i[2:]) for i in config('include') if i.startswith('-i') ]
|
|
||||||
|
|
||||||
if mysqlclient == "mysqlclient":
|
extra_compile_args = mysql_config("cflags")
|
||||||
libs = config("libs")
|
|
||||||
elif mysqlclient == "mysqlclient_r":
|
|
||||||
libs = config("libs_r")
|
|
||||||
elif mysqlclient == "mysqld":
|
|
||||||
libs = config("embedded")
|
|
||||||
library_dirs = [ dequote(i[2:]) for i in libs if i.startswith("-L") ]
|
|
||||||
libraries = [ dequote(i[2:]) for i in libs if i.startswith("-l") ]
|
|
||||||
|
|
||||||
# Workaround for a pre-4.1.9 bug
|
if static:
|
||||||
if "z" not in libraries:
|
extra_objects.append(os.path.join(
|
||||||
libraries.append("z")
|
library_dirs[0],'lib%s.a' % client))
|
||||||
|
|
||||||
extra_compile_args = config("cflags")
|
|
||||||
|
|
||||||
if mysqlstatic:
|
|
||||||
extra_objects.append(os.path.join(
|
|
||||||
library_dirs[0],'lib%s.a' % mysqlclient))
|
|
||||||
else:
|
|
||||||
libraries.append(mysqlclient)
|
|
||||||
|
|
||||||
|
|
||||||
classifiers = """
|
|
||||||
Development Status :: 5 - Production/Stable
|
|
||||||
Environment :: Other Environment
|
|
||||||
License :: OSI Approved :: GNU General Public License (GPL)
|
|
||||||
Operating System :: MacOS :: MacOS X
|
|
||||||
Operating System :: Microsoft :: Windows :: Windows NT/2000
|
|
||||||
Operating System :: OS Independent
|
|
||||||
Operating System :: POSIX
|
|
||||||
Operating System :: POSIX :: Linux
|
|
||||||
Operating System :: Unix
|
|
||||||
Programming Language :: C
|
|
||||||
Programming Language :: Python
|
|
||||||
Topic :: Database
|
|
||||||
Topic :: Database :: Database Engines/Servers
|
|
||||||
"""
|
|
||||||
|
|
||||||
metadata = {
|
|
||||||
'name': name,
|
|
||||||
'version': version,
|
|
||||||
'description': "Python interface to MySQL",
|
|
||||||
'long_description': __doc__,
|
|
||||||
'author': "Andy Dustman",
|
|
||||||
'author_email': "andy@dustman.net",
|
|
||||||
'license': "GPL",
|
|
||||||
'platforms': "ALL",
|
|
||||||
'url': "http://sourceforge.net/projects/mysql-python",
|
|
||||||
'download_url': "http://prdownloads.sourceforge.net/mysql-python/" \
|
|
||||||
"MySQL-python-%s.tar.gz" % version,
|
|
||||||
'classifiers': [ c for c in classifiers.split('\n') if c ],
|
|
||||||
'py_modules': [
|
|
||||||
"_mysql_exceptions",
|
|
||||||
"MySQLdb.converters",
|
|
||||||
"MySQLdb.connections",
|
|
||||||
"MySQLdb.cursors",
|
|
||||||
"MySQLdb.sets",
|
|
||||||
"MySQLdb.times",
|
|
||||||
"MySQLdb.stringtimes",
|
|
||||||
"MySQLdb.mxdatetimes",
|
|
||||||
"MySQLdb.pytimes",
|
|
||||||
"MySQLdb.constants.CR",
|
|
||||||
"MySQLdb.constants.FIELD_TYPE",
|
|
||||||
"MySQLdb.constants.ER",
|
|
||||||
"MySQLdb.constants.FLAG",
|
|
||||||
"MySQLdb.constants.REFRESH",
|
|
||||||
"MySQLdb.constants.CLIENT",
|
|
||||||
],
|
|
||||||
'ext_modules': [
|
|
||||||
Extension(
|
|
||||||
name='_mysql',
|
|
||||||
sources=['_mysql.c'],
|
|
||||||
include_dirs=include_dirs,
|
|
||||||
library_dirs=library_dirs,
|
|
||||||
libraries=libraries,
|
|
||||||
extra_compile_args=extra_compile_args,
|
|
||||||
extra_objects=extra_objects,
|
|
||||||
),
|
|
||||||
],
|
|
||||||
}
|
|
||||||
|
|
||||||
|
ext_mysql_metadata = dict(
|
||||||
|
name="_mysql",
|
||||||
|
include_dirs=include_dirs,
|
||||||
|
library_dirs=library_dirs,
|
||||||
|
libraries=libraries,
|
||||||
|
extra_compile_args=extra_compile_args,
|
||||||
|
extra_objects=extra_objects,
|
||||||
|
sources=['_mysql.c'],
|
||||||
|
)
|
||||||
|
if config.read(['site.cfg']):
|
||||||
|
ext_mysql_metadata.update([ (k, v.split()) for k, v in config.items('compiler') ])
|
||||||
|
ext_mysql = Extension(**ext_mysql_metadata)
|
||||||
|
metadata['ext_modules'] = [ext_mysql]
|
||||||
setup(**metadata)
|
setup(**metadata)
|
||||||
|
28
MySQLdb/site.cfg
Normal file
28
MySQLdb/site.cfg
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
# Options:
|
||||||
|
#
|
||||||
|
# embedded: link against the embedded server library
|
||||||
|
# threadsafe: use the threadsafe client
|
||||||
|
# static: link against a static library (probably required for embedded)
|
||||||
|
|
||||||
|
[options]
|
||||||
|
embedded = False
|
||||||
|
threadsafe = True
|
||||||
|
static = False
|
||||||
|
|
||||||
|
# Use the compiler section to add additional options for the extension build.
|
||||||
|
# In particular, if your platform does not support mysql_config (like
|
||||||
|
# Windows), you will have to set most of these. Note that each entry is split
|
||||||
|
# into a list so that each line is one item.
|
||||||
|
|
||||||
|
[compiler]
|
||||||
|
#mysql_root: /usr/local/mysql
|
||||||
|
#library_dirs: %(mysql_root)s/lib
|
||||||
|
#include_dirs: %(mysql_root)s/include
|
||||||
|
#libraries: mysqlclient
|
||||||
|
# zlib
|
||||||
|
# msvcrt
|
||||||
|
# libcmt
|
||||||
|
# wsock32
|
||||||
|
# advapi32
|
||||||
|
#extra_compile_args:
|
||||||
|
#extra_objects:
|
Reference in New Issue
Block a user