On Sep 13, 2009, at 7:27 PM, andrei wrote:

>
> I try to create the table with column:
>
> Column('ends_at', TIMESTAMP, nullable=True, server_default="")
>
> That results to SQL:
>
> CREATE TABLE news (
>       ....
>       ends_at TIMESTAMP DEFAULT '',
>      ....
> )
>
> But mysql TIMESTAMP columns are NOT NULL by default, so I get this
> exception:
>
> (1067, "Invalid default value for 'ends_at'")
>
> However, a TIMESTAMP column can be allowed to contain NULL by
> declaring it with the NULL attribute.
> How to add NULL attribute explicitly? so the generated code would be:
>
> CREATE TABLE news (
>       ....
>       ends_at TIMESTAMP NULL DEFAULT '',
>      ....
> )

the MySQL dialect doesn't offer that feature right now.

Here's a patch against trunk which would accomplish it:

Index: lib/sqlalchemy/dialects/mysql/base.py
===================================================================
--- lib/sqlalchemy/dialects/mysql/base.py       (revision 6339)
+++ lib/sqlalchemy/dialects/mysql/base.py       (working copy)
@@ -1330,7 +1330,9 @@

          if not column.nullable:
              colspec.append('NOT NULL')
-
+        elif isinstance(column.type, types.TIMESTAMP):
+            colspec.append('NULL')
+
          if column.primary_key and column.autoincrement:
              try:
                  first = [c for c in column.table.primary_key.columns

otherwise for now you'd have to issue that manually or use ALTER TABLE  
after the fact to set it up (i'd use DDL() for the ALTER).   Or just  
use a DATETIME type instead.




--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to