Hallo,
ein Beispiel:
Code: Alles auswählen
#!/usr/bin/python
#-*- coding: utf-8 -*-
import sqlalchemy
print "SQL Alchemy Version", sqlalchemy.__version__ # 0.5rc2
from sqlalchemy import *
from sqlalchemy.orm import *
#from sqlalchemy.ext.declarative import declarative_base
#from sqlalchemy import ForeignKey
#from sqlalchemy.orm import relation, backref
engine = create_engine('sqlite:///tutorial_sqlalchemy05.sqlite', echo = True,
encoding="utf-8")
Session = sessionmaker(bind=engine)
session = Session()
#------------------------------------------------------------------------------
metadata = MetaData()
#Base = declarative_base()
#------------------------------------------------------------------------------
users_table = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
Column('fullname', String),
Column('password', String))
#------------------------------------------------------------------------------
class User(object):
def __init__(self, name, fullname, password):
self.name = name
self.fullname = fullname
self.password = password
def __repr__(self):
return "<User('%s','%s', '%s')>" % (self.name, self.fullname,
self.password)
#------------------------------------------------------------------------------
mapper(User, users_table)
metadata.create_all(engine)
#------------------------------------------------------------------------------
ed_user = User('ed', 'Ed Jones', 'edspassword')
umlaut_user = User('Mit', 'Umlaut', 'EinÖ')
session.add(ed_user)
session.add(umlaut_user)
session.commit()
query = session.query(User).filter(User.name == "Mit")
print query.all()
Bringt die Fehlermeldung:
SQL Alchemy Version 0.5.0rc2
2008-10-26 08:01:59,570 INFO sqlalchemy.engine.base.Engine.0x...0ecL PRAGMA table_info("users")
2008-10-26 08:01:59,571 INFO sqlalchemy.engine.base.Engine.0x...0ecL {}
2008-10-26 08:01:59,572 INFO sqlalchemy.engine.base.Engine.0x...0ecL
CREATE TABLE users (
id INTEGER NOT NULL,
name VARCHAR,
fullname VARCHAR,
password VARCHAR,
PRIMARY KEY (id)
)
2008-10-26 08:01:59,573 INFO sqlalchemy.engine.base.Engine.0x...0ecL {}
2008-10-26 08:01:59,579 INFO sqlalchemy.engine.base.Engine.0x...0ecL COMMIT
2008-10-26 08:01:59,585 INFO sqlalchemy.engine.base.Engine.0x...0ecL BEGIN
2008-10-26 08:01:59,587 INFO sqlalchemy.engine.base.Engine.0x...0ecL INSERT INTO users (name, fullname, password) VALUES (?, ?, ?)
2008-10-26 08:01:59,587 INFO sqlalchemy.engine.base.Engine.0x...0ecL ['ed', 'Ed Jones', 'edspassword']
2008-10-26 08:01:59,588 INFO sqlalchemy.engine.base.Engine.0x...0ecL INSERT INTO users (name, fullname, password) VALUES (?, ?, ?)
2008-10-26 08:01:59,588 INFO sqlalchemy.engine.base.Engine.0x...0ecL ['Mit', 'Umlaut', 'Ein\xc3\x96']
2008-10-26 08:01:59,589 INFO sqlalchemy.engine.base.Engine.0x...0ecL COMMIT
2008-10-26 08:01:59,594 INFO sqlalchemy.engine.base.Engine.0x...0ecL BEGIN
2008-10-26 08:01:59,596 INFO sqlalchemy.engine.base.Engine.0x...0ecL SELECT users.id AS users_id, users.name AS users_name, users.fullname AS users_fullname, users.password AS users_password
FROM users
WHERE users.name = ?
2008-10-26 08:01:59,624 INFO sqlalchemy.engine.base.Engine.0x...0ecL ['Mit']
[Traceback (most recent call last):
File "./EncodingFehler", line 46, in <module>
print query.all()
UnicodeEncodeError: 'ascii' codec can't encode character u'\xd6' in position 26: ordinal not in range(128)
Ansonsten passiert nichts und der Rechner stürzt nicht ab...
