2011-09-05 88 views
-2

当我运行以下程序时,出现令人生厌的语法错误。以下是错误:Python SQLAlchemy语法错误

File "Create_the_database.py", line 64 

^
SyntaxError: invalid syntax 

下面是代码(长,但重复的那么容易脱脂):

import sqlalchemy 
from sqlalchemy import * 

engine = create_engine('sqlite:///Users/benscholz/Dropbox/OmniCloud/omnicloud/dev.db') 
meta = MetaData() 
createUsersTable() 
createAccountsTable() 
createPasswordsTable() 
meta.bind = engine 
meta.create_all(engine) 

def createUsersTable(): 
    print("creating User Table") 
    users = Table('users', metadata, 
     Column('id', Integer, primary_key = True), 
     Column('username', String, nullable = False), 
     Column('email_address', String, nullable = False), 
     Column('first_name', String), 
     Column('full_name', String), 
     Column('join_date', DateTime)) 

def createAccountsTable(): 
    print("creating Accounts Table") 
    accounts = Table('accounts', metadata, 
     Column('user_id', ForeignKey('users.id')), 
     Column('facebook_username', String), 
     Column('email_username_1', String), 
     Column('email_username_2', String), 
     Column('email_username_3', String), 
     Column('email_username_4', String), 
     Column('email_username_5', String), 
     Column('twitter_username_1', String), 
     Column('twitter_username_2', String), 
     Column('twitter_username_3', String), 
     Column('klout_username', String), 
     Column('dropbox_username', String), 
     Column('box_username', String), 
     Column('flickr_username_1', String), 
     Column('flickr_username_2', String), 
     Column('instagram_username', String), 
     Column('disqus_username', String), 
     Column('stack_overflow_username', String)) 

def createPasswordsTable(): 
    print("creating Passwords Table") 
    passwords = Table('passwords', metadata, 
     Column('user_id', ForeignKey('users.id')), 
     Column('facebook_pass', String), 
     Column('email_pass_1', String), 
     Column('email_pass_2', String), 
     Column('email_pass_3', String), 
     Column('email_pass_4', String), 
     Column('email_pass_5', String), 
     Column('twitter_pass_1', String), 
     Column('twitter_pass_2', String), 
     Column('twitter_pass_3', String), 
     Column('klout_pass', String), 
     Column('dropbox_pass', String), 
     Column('box_pass', String), 
     Column('flickr_pass_1', String), 
     Column('flickr_pass_2', String), 
     Column('instagram_pass', String), 
     Column('disqus_pass', String), 
     Column('stack_overflow_pass', String)) 

该计划是长64行,以便它似乎到达终点,并期望...什么?

+0

换行符?制表符与空格?评论必须是十五个字符,所以这句话与我的评论完全无关。 –

+0

为什么用这种方式创建具有函数的表?使用SQLAlchemy,您只需在顶层定义您的表。您将需要稍后从其他代码中引用它们。在这里,你的表格定义在超出范围时会消失。 – Keith

+0

@Carl我只使用我的文本编辑器(巧克力)显示的标签设置为4个空格 – Chris

回答

1

它固定两件事情后,我工作得很好。

  1. 变量元应该是元数据。 Table()的第二个参数引用了全局变量。
  2. 从createUsersTable()到metadata.create_all(引擎)的行应向下移动到底部。在定义它们之前不能调用函数。

至于语法错误,我猜这个文件在最后一行有些无效字符,不能打印在屏幕上。我的建议是删除最后一行,然后重新键入。