- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
' is not defined"in SQLAlchemy 导入数据时-6ren"> ' is not defined"in SQLAlchemy 导入数据时-当尝试使用 SQLAlchemy 表达式语言将用户数据从 JSON 文件导入数据库时,出现错误:NameError:未定义名称“用户” 回溯如下: Traceback (most recent c-6ren">
当尝试使用 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/
1) "select * from `union` WHERE `thanaId`='$thana_id'" // it's working VS2) "select * from union
我的 SQL Server 2005 数据库中的某些表被命名为 lu.[TableName] 而不是 dbo.[TableName]。卢代表什么? 注意:我已经试过谷歌了 最佳答案 这将是 SQL S
我是使用 typescript 的新手,我正在使用 typescript 和 postgres 开发 API NodeJS。 我正在使用 docker 到 postgres,并且我有以下 docker
这个问题在这里已经有了答案: 关闭 13 年前。 Possible Duplicates: Select * vs Specifying Column Names Which is faster/b
我正在用 PHP PDO 编写一个用户注册函数,我发现我的查询只有这样写才能正常运行: setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION
我正在使用 JPA,我需要将“tableName”设为一个变量。 在数据库中,我有很多表,我的代码需要访问我指定要读取的表。 @Entity @Table(name = "tableName") pu
我关注了这个YouTube tutorial首先尝试使用无服务器框架开发无服务器 rest api。它给出了 MissingRequiredParameter 的错误并将初始化的表名称设置为未定义。
这个问题在这里已经有了答案: MySQL: NULL vs "" (12 个答案) MySQL, better to insert NULL or empty string? (6 个答案) 关闭
我目前正在学习 hibernate,无法从 oracle 获取数据。非常感谢任何帮助。 请找到下面的配置文件、pojo类和main方法... hibernate .cfg.xml
我的应用程序中有一个 JDBCAppender,我想为其设置 main argument lookup 中的 tableName 参数。 。原因是我的数据库表可以选择有一个前缀,所以我从应用程序中的配
您好,我正在尝试创建一个通用方法来从数据库中读取数据。这是我目前所拥有的: private static void GetData(string tableName, string key, stri
我通过一个网站和 html 5 视频标签,在家里制作了一个供个人使用的“电影”数据库,我轻松完成了该数据库,它包括一个索引页,列出了数据库中的所有电影,然后单击一个会将您链接到一个页面,该页面将在 h
我的 table 有这个问题。我想删除它但不起作用 我尝试删除 de .ibd 文件,他们将一些 frm 文件重命名为与 te ibd 相同的名称来删除表,但不起作用 当我删除表,然后再次创建它时,它
我在Windows 2008服务器上使用MySQL 5.1版本。当我执行以下查询时: SELECT * FROM tablename; It is taking too much time for f
最近我将一个 MySQL 数据库从一台服务器复制到另一台服务器。同时我已经从 Master DB 中清除了许多行。所以一段时间后复制正确完成。我验证了两个数据库中的数据计数,它是相同的。 之后,我只是
我正在编写一个锁定表的 MySQL 查询: "LOCK TABLE table_1 WRITE" 之后我执行了一些函数,在其中一个函数中,我在另一个我没有锁定的表上执行另一个查询: "SELECT *
我正在编写一个锁定表的 MySQL 查询: "LOCK TABLE table_1 WRITE" 之后我执行了一些函数,在其中一个函数中,我在另一个我没有锁定的表上执行另一个查询: "SELECT *
我想创建数据库并使用 Entity Framework ,但是当我运行我的 wpf 项目时,出现此错误。 2 个表出现此错误。在这里,我的错误: using (var c = new RSPDbCon
最好的方法是什么? 尝试过这样的事情: public String FormatColumnName(String columnName) { String formatedColumnNam
我在网上找不到这个问题的答案(可能是因为google不喜欢特殊字符),这种形式的查询是什么意思? Select tableName.* FROM tableName 我会说这就像 Select * f
我是一名优秀的程序员,十分优秀!