mirror of
https://github.com/spl0k/supysonic.git
synced 2024-12-22 17:06:17 +00:00
Allow extra db connection args. Set utf8mb4 as the default charset for MySQL
This commit is contained in:
parent
3005e529a2
commit
ba61281ba1
@ -27,7 +27,12 @@ URI is:
|
|||||||
|
|
||||||
driver://username:password@host:port/database
|
driver://username:password@host:port/database
|
||||||
|
|
||||||
Supported drivers are `sqlite`, `mysql` and `postgres` (or `postgresql`)
|
If the connection needs some additional parameters, they can be provided as a
|
||||||
|
query string, such as:
|
||||||
|
|
||||||
|
driver://username:password@host:port/database?param1=value1¶m2=value2
|
||||||
|
|
||||||
|
Supported drivers are `sqlite`, `mysql` and `postgres` (or `postgresql`).
|
||||||
|
|
||||||
As SQLite connects to local files, the format is slightly different. The "file"
|
As SQLite connects to local files, the format is slightly different. The "file"
|
||||||
portion of the URI is the filename of the database. For a relative path, it
|
portion of the URI is the filename of the database. For a relative path, it
|
||||||
@ -43,8 +48,10 @@ database_uri = sqlite:////home/user/supysonic.db
|
|||||||
database_uri = sqlite:///C:\Users\user\supysonic.db
|
database_uri = sqlite:///C:\Users\user\supysonic.db
|
||||||
```
|
```
|
||||||
|
|
||||||
A MySQL-compatible database require either `MySQLdb` or `pymysql` to be
|
A MySQL-compatible database requires either `MySQLdb` or `pymysql` to be
|
||||||
installed. PostgreSQL needs `psycopg2`.
|
installed. PostgreSQL needs `psycopg2`.
|
||||||
|
Note that for MySQL if no character set is defined on the URI it defaults to
|
||||||
|
`utf8mb4` regardless of what's set on your MySQL installation.
|
||||||
|
|
||||||
If `database_uri` isn't provided, it defaults to a SQLite database stored in
|
If `database_uri` isn't provided, it defaults to a SQLite database stored in
|
||||||
`/tmp/supysonic/supysonic.db`.
|
`/tmp/supysonic/supysonic.db`.
|
||||||
|
@ -31,9 +31,9 @@ from uuid import UUID, uuid4
|
|||||||
from .py23 import dict, strtype
|
from .py23 import dict, strtype
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse, parse_qsl
|
||||||
except ImportError:
|
except ImportError:
|
||||||
from urlparse import urlparse
|
from urlparse import urlparse, parse_qsl
|
||||||
|
|
||||||
def now():
|
def now():
|
||||||
return datetime.now().replace(microsecond = 0)
|
return datetime.now().replace(microsecond = 0)
|
||||||
@ -443,6 +443,8 @@ def parse_uri(database_uri):
|
|||||||
raise TypeError('Expecting a string')
|
raise TypeError('Expecting a string')
|
||||||
|
|
||||||
uri = urlparse(database_uri)
|
uri = urlparse(database_uri)
|
||||||
|
args = dict(parse_qsl(uri.query))
|
||||||
|
|
||||||
if uri.scheme == 'sqlite':
|
if uri.scheme == 'sqlite':
|
||||||
path = uri.path
|
path = uri.path
|
||||||
if not path:
|
if not path:
|
||||||
@ -450,11 +452,12 @@ def parse_uri(database_uri):
|
|||||||
elif path[0] == '/':
|
elif path[0] == '/':
|
||||||
path = path[1:]
|
path = path[1:]
|
||||||
|
|
||||||
return dict(provider = 'sqlite', filename = path)
|
return dict(provider = 'sqlite', filename = path, **args)
|
||||||
elif uri.scheme in ('postgres', 'postgresql'):
|
elif uri.scheme in ('postgres', 'postgresql'):
|
||||||
return dict(provider = 'postgres', user = uri.username, password = uri.password, host = uri.hostname, database = uri.path[1:])
|
return dict(provider = 'postgres', user = uri.username, password = uri.password, host = uri.hostname, dbname = uri.path[1:], **args)
|
||||||
elif uri.scheme == 'mysql':
|
elif uri.scheme == 'mysql':
|
||||||
return dict(provider = 'mysql', user = uri.username, passwd = uri.password, host = uri.hostname, db = uri.path[1:])
|
args.setdefault('charset', 'utf8mb4')
|
||||||
|
return dict(provider = 'mysql', user = uri.username, passwd = uri.password, host = uri.hostname, db = uri.path[1:], **args)
|
||||||
return dict()
|
return dict()
|
||||||
|
|
||||||
def init_database(database_uri, create_tables = False):
|
def init_database(database_uri, create_tables = False):
|
||||||
|
Loading…
Reference in New Issue
Block a user