時,當試圖從一個JSON文件到使用SQLAlchemy的表達式語言數據庫導入用戶數據SQLAlchemy中,我得到的錯誤: NameError: name 'users' is not defined
「NameError:名字‘<tableName>’沒有定義」導入數據
的回溯如下:
Traceback (most recent call last):
File "C:\Users\lmills\MyProject\Database-Configuration\CreateTable.py", line 43, in <module>
importData.userDataImport()
File "C:\Users\lmills\MyProject\Database-Configuration\importData.py", line 11, in userDataImport
conn.execute(users.insert(), userid = userData[i]['userid'], altuid = userData[i]['altuid'], lname = userData[i]['lname'], fname = userData[i]['fname'], phoneNum = userData[i]['phoneNum'], emailAddr = userData[i]['emailAddr'])
NameError: name 'users' is not defined
我發出的Python程序的創建表的語句,CreateTable.py:
from sqlalchemy import create_engine, Table, Column, Integer, String,
MetaData, ForeignKey
import importData
import json
engine = create_engine('sqlite:///MyProject.db', echo=True)
metadata = MetaData(engine)
metadata.drop_all(engine)
users = Table('users', metadata,
Column('userid', Integer, primary_key=True),
Column('altuid', String(12)),
Column('lname', String(32)),
Column('fname', String(32)),
Column('phone_num', Integer, nullable=False),
Column('email_addr', String(32), nullable=False),
)
subscribables = Table('subscribables', metadata,
Column('subtag', Integer, primary_key=True),
Column('message_template', String(64)),
Column('descriptor_string', String(64)),
)
user_subs = Table('user_subs', metadata,
Column('userid', Integer, ForeignKey('users.userid')),
Column('subtag', Integer, ForeignKey('subscribables.subtag')),
)
user_prefs = Table('user_prefs', metadata,
Column('userid', Integer, ForeignKey('users.userid')),
Column('type_id', String(8), ForeignKey('notification_type.type_id')),
)
notification_type = Table('notification_type', metadata,
Column('type_id', String(8), primary_key=True),
Column('typename', String(8), nullable=False),
Column('Template', String(64)),
)
metadata.create_all()
importData.userDataImport()
然後我嘗試使用一個模塊導入數據,userDataImport的importData.py文件,其中包含以下範圍內:
import json
from sqlalchemy import create_engine
import sqlalchemy
def userDataImport():
engine = create_engine('sqlite:///MyProject.db', echo=True)
conn = engine.connect()
with open(r'C:\Users\lmills\MyProject\userData.json') as dataFile:
userData = json.load(dataFile)
for i in range(len(userData)):
conn.execute(users.insert(), userid = userData[i]['userid'], altuid = userData[i]['altuid'], lname = userData[i]['lname'], fname = userData[i]['fname'], phoneNum = userData[i]['phoneNum'], emailAddr = userData[i]['emailAddr'])
if __name__ == "__main__": userDataImport()
但是SQLAlchemy中無法識別的用戶,這是我在CreateTable.py已經創建的表如果我在CreateTable.py中的metadata.create_all()
之後立即從userDataImport模塊移動代碼,則一切正常並且很棒;在我稱之爲模塊的情況下,我無法使其工作。 我試圖將引擎傳遞給userDataImport,或者將連接對象傳遞給userDataImport,但這兩種嘗試都未見成效(在兩種情況下引擎= ...和conn = ...在哪裏被刪除)。我哪裏錯了?
我不相信那是相當的解決方案。首先,它不起作用。其次,關鍵在於將創建表語句中的導入語句抽象出來,而這種解決方案完全忽視了這一點。我希望數據庫能夠讓我將數據導入到表中,而不必每次都引用create table腳本。這看起來不正確。 –