' is not defined"in SQLAlchemy 导入数据时-6ren"> ' is not defined"in SQLAlchemy 导入数据时-当尝试使用 SQLAlchemy 表达式语言将用户数据从 JSON 文件导入数据库时​​,出现错误:NameError:未定义名称“用户” 回溯如下: Traceback (most recent c-6ren">
gpt4 book ai didi

python - "NameError: name ' ' is not defined"in SQLAlchemy 导入数据时

转载 作者:搜寻专家 更新时间:2023-10-30 23:40:02 24 4
gpt4 key购买 nike

当尝试使用 SQLAlchemy 表达式语言将用户数据从 JSON 文件导入数据库时​​,出现错误:NameError:未定义名称“用户”

回溯如下:

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()

然后我尝试使用 importData.py 文件中的模块 userDataImport 导入数据,该文件包含以下内容:

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 中创建的表工作正常,花花公子;在我调用这个模块的情况下,我无法让它工作。我曾尝试将引擎传递给 userDataImport,或者将连接对象传递给 userDataImport,但这些尝试都没有成功(在这两种情况下,引擎 = ... 和 conn = ... 已删除)。我哪里错了?

最佳答案

所以我找到了解决这个问题的有趣方法。这个问题确实是一个范围界定问题。鉴于我在插入操作中没有 users 的上下文,Python 变得很困惑。所以我找到了一个更像 SQL 的方法,它在传递给 execute 函数的字符串中调用 SQL 语句。通过这种方式,SQLAlchemy 处理了 SQL 的解析,并在将表传递给连接时引用了表,该连接用作 users 的上下文。解决方案如下所示:

engine = create_engine(r'<path to database')
metadata = MetaData(engine)
metadata.reflect()

with engine.begin() as conn:
conn.execute("insert into users (userid, altid, lname, fname, phone_num, email_addr) values (<user id>, <alternate id>, <last name>, <first name>, <phone number>, <email address>))

包含在小于号和大于号中的实体是特定值。这成功地将数据以原始问题中发布的所需方法插入数据库。同样,update/select 也可以使用这种类似 SQL 的方法,而标准的 users.update(...) users.select(...) 则不能。

为了后代,这里是 SQLAlchemy 文档页面,其中包含用于类似 SQL 插入的特定语法:http://docs.sqlalchemy.org/en/rel_1_0/core/tutorial.html#using-textual-sql

关于python - "NameError: name ' <tableName> ' is not defined"in SQLAlchemy 导入数据时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36140474/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com