Hallo Forum,
ich habe bisher pymssql genutzt um mit MS SQL Server zu arbeiten. Da aber pymssql keine Select-Abfragen über unicode-Spalten (nchar,nvarchar,ntext) zulässt (hier beschrieben), bin ich nun auf der Suche nach einer Alternative zu pymssql. Habt ihr Vorschläge, welche Erfahrungen habt ihr gemacht?
Gruß
febel
Alternativen zu pymssql
- Sr4l
- User
- Beiträge: 1091
- Registriert: Donnerstag 28. Dezember 2006, 20:02
- Wohnort: Kassel
- Kontaktdaten:
Ich habe nun schon öfters von SQLAlchemy ( http://www.sqlalchemy.org/ ) gehört habe es mir jedoch noch nicht genau angeschaut. Ich denke ( nach meinem jetzigen Wissensstand) werde ich es bald einsetzen.
Was es genau kann oder ob es nur die verstreuten API Ansteuerungen unter eine Hut bringt weiß ich noch nicht. Dazu kann ja mal jemand was sagen.
Ich weiß auch nicht ob es bei deinem Problem hilft, aber du kannst es dir ja mal anschauen.
PS: z.Z nutze nur SQLite und Python-MySQLdb und bin recht glücklich damit
Was es genau kann oder ob es nur die verstreuten API Ansteuerungen unter eine Hut bringt weiß ich noch nicht. Dazu kann ja mal jemand was sagen.
Ich weiß auch nicht ob es bei deinem Problem hilft, aber du kannst es dir ja mal anschauen.
PS: z.Z nutze nur SQLite und Python-MySQLdb und bin recht glücklich damit

Soll es denn weiterhin ein MS SQL Server sein? Ansonsten empfehle ich SQLAlchemy, was für MS SQL pyodbc , adodbapi und pymssql unterstützt.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo febel!febel hat geschrieben:bin ich nun auf der Suche nach einer Alternative zu pymssql.
Ich verwende "pyodbc" um mich mit MS-SQL-Datenbanken zu verbinden. Es funktioniert. Macht nicht so viele Probleme wie "pymssql", aber ich habe keine Unicode-Felder in meinen Datenbanken. Außerdem gibt es nicht einfach jeglichen Text als Unicode-String aus. Diesen muss man explizit umwandeln.
http://pyodbc.sourceforge.net/
Ich verbinde mich so zur Datenbank:
Code: Alles auswählen
# Verbinden
connstr = """
DRIVER=SQL Server;
UID=%s;
PWD=%s;
DATABASE=%s;
SERVER=%s;
APP=Microsoft Data Access Components;
""" % (
username,
password,
database,
host,
)
conn = pyodbc.connect(connstr)
Code: Alles auswählen
import pyodbc
SQL_ENCODING = "iso-8859-1"
def to_unicode(text):
"""
Wandelt den Datenbanktext nach Unicode um und normalisiert die
Zeilenumbrüche.
"""
if text is None:
return None
text = text.replace("\r\n", "\n")
if isinstance(text, str):
return text.decode(SQL_ENCODING)
else:
return text
def to_dbstring(text):
"""
Wandelt Unicode in das SQL-Encoding um. Nebenbei werden Zeilenumbrüche
in das Windows-Format umgewandelt.
"""
if text is None:
return None
text = text.replace("\r\n", "\n")
text = text.replace("\n", "\r\n")
if isinstance(text, unicode):
return text.encode(SQL_ENCODING)
else:
return text
def row_to_unicode(row):
"""
Läuft jedes Feld eines Datensatzes durch. Wenn ein Feld vom Typ `str` ist,
dann wird es nach Unicode umgewandelt.
"""
if row is None:
return None
new_row = []
for field in row:
if isinstance(field, str):
new_row.append(field.decode(SQL_ENCODING))
else:
new_row.append(field)
return new_row
def row_to_dbstring(row):
"""
Läuft jedes Feld eines Datensatzes durch. Wenn ein Feld vom Typ `unicode` ist,
dann wird es nach str umgewandelt. (SQL_ENCODING)
"""
if row is None:
return None
new_row = []
for field in row:
if isinstance(field, unicode):
new_row.append(field.encode(SQL_ENCODING))
else:
new_row.append(field)
return new_row

mfg
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.