Попробуйте это
from sqlalchemy import create_engine
engine = create_engine('mysql://test:test@localhost/test', echo=True)
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Date, Column, Integer
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True, autoincrement=True)
day = Column(Date, unique=True)
if __name__ == '__main__':
Base.metadata.create_all(engine)
c = engine.connect()
c.execute("""INSERT INTO users(day) VALUES ('2012-03-05') ON DUPLICATE KEY UPDATE day='2012-03-04'""")
Когда я запускаю этот файл первый раз, я получаю журнал как
2012-03-05 12:39:42,202 INFO sqlalchemy.engine.base.Engine SELECT DATABASE()
2012-03-05 12:39:42,202 INFO sqlalchemy.engine.base.Engine ()
2012-03-05 12:39:42,204 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'character_set%%'
2012-03-05 12:39:42,204 INFO sqlalchemy.engine.base.Engine ()
2012-03-05 12:39:42,205 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'lower_case_table_names'
2012-03-05 12:39:42,205 INFO sqlalchemy.engine.base.Engine ()
2012-03-05 12:39:42,206 INFO sqlalchemy.engine.base.Engine SHOW COLLATION
2012-03-05 12:39:42,206 INFO sqlalchemy.engine.base.Engine ()
2012-03-05 12:39:42,209 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'sql_mode'
2012-03-05 12:39:42,209 INFO sqlalchemy.engine.base.Engine ()
2012-03-05 12:39:42,210 INFO sqlalchemy.engine.base.Engine DESCRIBE `users`
2012-03-05 12:39:42,210 INFO sqlalchemy.engine.base.Engine ()
2012-03-05 12:39:42,211 INFO sqlalchemy.engine.base.Engine INSERT INTO users(day) VALUES ('2012-03-05') ON DUPLICATE KEY UPDATE day='2012-03-04'
2012-03-05 12:39:42,211 INFO sqlalchemy.engine.base.Engine ()
2012-03-05 12:39:42,212 INFO sqlalchemy.engine.base.Engine COMMIT
Затем я проверяю в базе данных
mysql> select * from users;
+----+------------+
| id | day |
+----+------------+
| 8 | 2012-03-05 |
+----+------------+
1 row in set (0.00 sec)
Тогда яснова запустите программу
и снова проверьте mysql.
mysql> select * from users;
+----+------------+
| id | day |
+----+------------+
| 8 | 2012-03-04 |
+----+------------+
1 row in set (0.00 sec)