2010-01-10 5 views
0

hmm, y a-t-il une raison pour laquelle sa essaie d'ajouter Nones à pour les colonnes varchar qui ont des valeurs par défaut dans le schéma de base de données, il ne le fait pas pour floats ou ints en utilisant la réflexion).Problème avec sqlalchemy, table reflétée et valeurs par défaut pour les champs string

donc lorsque je tente d'ajouter une nouvelle ligne: comme u = Utilisateur() u.foo = 'a' = u.bar 'b'

sa émet une requête qui a beaucoup plus cols avec des valeurs None assignées à ceux-ci, et DB évidemment Bards et ne pas effectuer la substitution par défaut.

+2

-1: Pas de code. Vous devriez poster le plus petit morceau de code qui montre l'erreur. Sinon, nous devons deviner ce que vous faites et pourquoi cela ne fonctionne pas. –

Répondre

0

J'ai trouvé son un bug dans sa, cela se produit uniquement pour les champs de chaîne, ils n'obtenir la propriété server_default pour une raison inconnue, a déposé un billet pour ce déjà

2

Quelle version utilisez-vous et quelle est réelle code? Voici un exemple de code montrant que le paramètre server_default fonctionne très bien pour les champs de chaîne:

from sqlalchemy import * 
from sqlalchemy.ext.declarative import declarative_base 
from sqlalchemy.orm import sessionmaker 

metadata = MetaData() 
Base = declarative_base(metadata=metadata) 

class Item(Base): 
    __tablename__="items" 
    id = Column(String, primary_key=True) 
    int_val = Column(Integer, nullable=False, server_default='123') 
    str_val = Column(String, nullable=False, server_default='abc') 

engine = create_engine('sqlite://', echo=True) 
metadata.create_all(engine) 
session = sessionmaker(engine)() 

item = Item(id='foo') 
session.add(item) 
session.commit() 
print item.int_val, item.str_val 

La sortie est:

<...> 
<...> INSERT INTO items (id) VALUES (?) 
<...> ['foo'] 
<...> 
123 abc 
Questions connexes